diff --git a/docs/ClangFormatStyleOptions.rst b/docs/ClangFormatStyleOptions.rst index 3f76da6dca..c0a6603575 100644 --- a/docs/ClangFormatStyleOptions.rst +++ b/docs/ClangFormatStyleOptions.rst @@ -734,7 +734,8 @@ the configuration (without a prefix: ``Auto``). Use C++03-compatible syntax. * ``LS_Cpp11`` (in configuration: ``Cpp11``) - Use features of C++11 (e.g. ``A>`` instead of ``A >``). + Use features of C++11, C++14 and C++1z (e.g. ``A>`` instead of + ``A >``). * ``LS_Auto`` (in configuration: ``Auto``) Automatic detection based on the input. diff --git a/include/clang/Driver/Driver.h b/include/clang/Driver/Driver.h index 72ac1ac580..c289bc595e 100644 --- a/include/clang/Driver/Driver.h +++ b/include/clang/Driver/Driver.h @@ -239,7 +239,7 @@ class Driver { llvm::opt::DerivedArgList * TranslateInputArgs(const llvm::opt::InputArgList &Args) const; - // getFinalPhase - Determine which compilation mode we are in and record + // getFinalPhase - Determine which compilation mode we are in and record // which option we used to determine the final phase. phases::ID getFinalPhase(const llvm::opt::DerivedArgList &DAL, llvm::opt::Arg **FinalPhaseArg = nullptr) const; @@ -347,12 +347,12 @@ class Driver { /// ArgList. llvm::opt::InputArgList ParseArgStrings(ArrayRef Args); - /// BuildInputs - Construct the list of inputs and their types from + /// BuildInputs - Construct the list of inputs and their types from /// the given arguments. /// /// \param TC - The default host tool chain. /// \param Args - The input arguments. - /// \param Inputs - The list to store the resulting compilation + /// \param Inputs - The list to store the resulting compilation /// inputs onto. void BuildInputs(const ToolChain &TC, llvm::opt::DerivedArgList &Args, InputList &Inputs) const; @@ -389,9 +389,9 @@ class Driver { int ExecuteCompilation(Compilation &C, SmallVectorImpl< std::pair > &FailingCommands); - /// generateCompilationDiagnostics - Generate diagnostics information + /// generateCompilationDiagnostics - Generate diagnostics information /// including preprocessed source file(s). - /// + /// void generateCompilationDiagnostics(Compilation &C, const Command &FailingCommand); @@ -461,7 +461,7 @@ class Driver { /// \param JA - The action of interest. /// \param BaseInput - The original input file that this action was /// triggered by. - /// \param BoundArch - The bound architecture. + /// \param BoundArch - The bound architecture. /// \param AtTopLevel - Whether this is a "top-level" action. /// \param MultipleArchs - Whether multiple -arch options were supplied. /// \param NormalizedTriple - The normalized triple of the relevant target. @@ -470,7 +470,7 @@ class Driver { bool AtTopLevel, bool MultipleArchs, StringRef NormalizedTriple) const; - /// GetTemporaryPath - Return the pathname of a temporary file to use + /// GetTemporaryPath - Return the pathname of a temporary file to use /// as part of compilation; the file will have the given prefix and suffix. /// /// GCC goes to extra lengths here to be a bit more robust. diff --git a/include/clang/Format/Format.h b/include/clang/Format/Format.h index 6c6458b33d..3f9a76f660 100644 --- a/include/clang/Format/Format.h +++ b/include/clang/Format/Format.h @@ -606,7 +606,8 @@ struct FormatStyle { enum LanguageStandard { /// Use C++03-compatible syntax. LS_Cpp03, - /// Use features of C++11 (e.g. ``A>`` instead of ``A >``). + /// Use features of C++11, C++14 and C++1z (e.g. ``A>`` instead of + /// ``A >``). LS_Cpp11, /// Automatic detection based on the input. LS_Auto diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index 1a95ff2681..445b4120ef 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -545,6 +545,8 @@ class OpenBSDTargetInfo : public OSTargetInfo { Builder.defineMacro("__ELF__"); if (Opts.POSIXThreads) Builder.defineMacro("_REENTRANT"); + if (this->HasFloat128) + Builder.defineMacro("__FLOAT128__"); } public: OpenBSDTargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts) @@ -552,11 +554,11 @@ class OpenBSDTargetInfo : public OSTargetInfo { this->TLSSupported = false; switch (Triple.getArch()) { - default: case llvm::Triple::x86: case llvm::Triple::x86_64: - case llvm::Triple::arm: - case llvm::Triple::sparc: + this->HasFloat128 = true; + // FALLTHROUGH + default: this->MCountName = "__mcount"; break; case llvm::Triple::mips64: @@ -5144,6 +5146,8 @@ class ARMTargetInfo : public TargetInfo { default: if (Triple.getOS() == llvm::Triple::NetBSD) setABI("apcs-gnu"); + else if (Triple.getOS() == llvm::Triple::OpenBSD) + setABI("aapcs-linux"); else setABI("aapcs"); break; @@ -5925,7 +5929,8 @@ class AArch64TargetInfo : public TargetInfo { public: AArch64TargetInfo(const llvm::Triple &Triple, const TargetOptions &Opts) : TargetInfo(Triple), ABI("aapcs") { - if (getTriple().getOS() == llvm::Triple::NetBSD) { + if (getTriple().getOS() == llvm::Triple::NetBSD || + getTriple().getOS() == llvm::Triple::OpenBSD) { WCharType = SignedInt; // NetBSD apparently prefers consistency across ARM targets to consistency @@ -7535,7 +7540,11 @@ class MipsTargetInfo : public TargetInfo { void setN64ABITypes() { setN32N64ABITypes(); - Int64Type = SignedLong; + if (getTriple().getOS() == llvm::Triple::OpenBSD) { + Int64Type = SignedLongLong; + } else { + Int64Type = SignedLong; + } IntMaxType = Int64Type; LongWidth = LongAlign = 64; PointerWidth = PointerAlign = 64; @@ -8574,6 +8583,8 @@ static TargetInfo *AllocateTarget(const llvm::Triple &Triple, return new LinuxTargetInfo(Triple, Opts); case llvm::Triple::NetBSD: return new NetBSDTargetInfo(Triple, Opts); + case llvm::Triple::OpenBSD: + return new OpenBSDTargetInfo(Triple, Opts); default: return new AArch64leTargetInfo(Triple, Opts); } diff --git a/lib/CodeGen/CGExprAgg.cpp b/lib/CodeGen/CGExprAgg.cpp index 009244784e..b10a549338 100644 --- a/lib/CodeGen/CGExprAgg.cpp +++ b/lib/CodeGen/CGExprAgg.cpp @@ -505,12 +505,20 @@ void AggExprEmitter::EmitArrayInit(Address DestPtr, llvm::ArrayType *AType, currentElement->addIncoming(element, entryBB); // Emit the actual filler expression. - LValue elementLV = - CGF.MakeAddrLValue(Address(currentElement, elementAlign), elementType); - if (filler) - EmitInitializationToLValue(filler, elementLV); - else - EmitNullInitializationToLValue(elementLV); + { + // C++1z [class.temporary]p5: + // when a default constructor is called to initialize an element of + // an array with no corresponding initializer [...] the destruction of + // every temporary created in a default argument is sequenced before + // the construction of the next array element, if any + CodeGenFunction::RunCleanupsScope CleanupsScope(CGF); + LValue elementLV = + CGF.MakeAddrLValue(Address(currentElement, elementAlign), elementType); + if (filler) + EmitInitializationToLValue(filler, elementLV); + else + EmitNullInitializationToLValue(elementLV); + } // Move on to the next element. llvm::Value *nextElement = diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp index c023281e2f..cc9b8ed357 100644 --- a/lib/Driver/Driver.cpp +++ b/lib/Driver/Driver.cpp @@ -112,6 +112,7 @@ void Driver::setDriverModeFromOption(StringRef Opt) { if (!Opt.startswith(OptName)) return; StringRef Value = Opt.drop_front(OptName.size()); + const unsigned M = llvm::StringSwitch(Value) .Case("gcc", GCCMode) .Case("g++", GXXMode) diff --git a/lib/Driver/ToolChain.cpp b/lib/Driver/ToolChain.cpp index 97d048baf5..a87617b4f8 100644 --- a/lib/Driver/ToolChain.cpp +++ b/lib/Driver/ToolChain.cpp @@ -494,7 +494,7 @@ std::string ToolChain::ComputeLLVMTriple(const ArgList &Args, StringRef Suffix = tools::arm::getLLVMArchSuffixForARM(CPU, MArch, Triple); bool IsMProfile = ARM::parseArchProfile(Suffix) == ARM::PK_M; - bool ThumbDefault = IsMProfile || (ARM::parseArchVersion(Suffix) == 7 && + bool ThumbDefault = IsMProfile || (ARM::parseArchVersion(Suffix) == 7 && getTriple().isOSBinFormatMachO()); // FIXME: this is invalid for WindowsCE if (getTriple().isOSWindows()) diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 7180e75049..656a3e471b 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -996,6 +996,10 @@ arm::FloatABI arm::getARMFloatABI(const ToolChain &TC, const ArgList &Args) { } break; + case llvm::Triple::OpenBSD: + ABI = FloatABI::Soft; + break; + default: switch (Triple.getEnvironment()) { case llvm::Triple::GNUEABIHF: @@ -1285,6 +1289,8 @@ void Clang::AddARMTargetArgs(const llvm::Triple &Triple, const ArgList &Args, default: if (Triple.getOS() == llvm::Triple::NetBSD) ABIName = "apcs-gnu"; + else if (Triple.getOS() == llvm::Triple::OpenBSD) + ABIName = "aapcs-linux"; else ABIName = "aapcs"; break; @@ -3879,9 +3885,10 @@ ParsePICArgs(const ToolChain &ToolChain, const ArgList &Args) { // OpenBSD-specific defaults for PIE if (Triple.getOS() == llvm::Triple::OpenBSD) { switch (ToolChain.getArch()) { + case llvm::Triple::arm: + case llvm::Triple::aarch64: case llvm::Triple::mips64: case llvm::Triple::mips64el: - case llvm::Triple::sparcel: case llvm::Triple::x86: case llvm::Triple::x86_64: IsPICLevelTwo = false; // "-fpie" @@ -3889,6 +3896,7 @@ ParsePICArgs(const ToolChain &ToolChain, const ArgList &Args) { case llvm::Triple::ppc: case llvm::Triple::sparc: + case llvm::Triple::sparcel: case llvm::Triple::sparcv9: IsPICLevelTwo = true; // "-fPIE" break; @@ -9690,12 +9698,12 @@ void openbsd::Linker::ConstructJob(Compilation &C, const JobAction &JA, CmdArgs.push_back("__start"); } + CmdArgs.push_back("--eh-frame-hdr"); if (Args.hasArg(options::OPT_static)) { CmdArgs.push_back("-Bstatic"); } else { if (Args.hasArg(options::OPT_rdynamic)) CmdArgs.push_back("-export-dynamic"); - CmdArgs.push_back("--eh-frame-hdr"); CmdArgs.push_back("-Bdynamic"); if (Args.hasArg(options::OPT_shared)) { CmdArgs.push_back("-shared"); diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp index 389761d482..12cb555869 100644 --- a/lib/Format/Format.cpp +++ b/lib/Format/Format.cpp @@ -1845,6 +1845,7 @@ LangOptions getFormattingLangOpts(const FormatStyle &Style) { LangOpts.CPlusPlus = 1; LangOpts.CPlusPlus11 = Style.Standard == FormatStyle::LS_Cpp03 ? 0 : 1; LangOpts.CPlusPlus14 = Style.Standard == FormatStyle::LS_Cpp03 ? 0 : 1; + LangOpts.CPlusPlus1z = Style.Standard == FormatStyle::LS_Cpp03 ? 0 : 1; LangOpts.LineComment = 1; bool AlternativeOperators = Style.Language == FormatStyle::LK_Cpp; LangOpts.CXXOperatorNames = AlternativeOperators ? 1 : 0; diff --git a/lib/Headers/avx512fintrin.h b/lib/Headers/avx512fintrin.h index e6a7217c89..4f4aa5cd6b 100644 --- a/lib/Headers/avx512fintrin.h +++ b/lib/Headers/avx512fintrin.h @@ -7860,12 +7860,12 @@ _mm512_mask_cvtepi64_storeu_epi16 (void *__P, __mmask8 __M, __m512i __A) 3 + ((imm) & 0x3) * 4); }) #define _mm512_mask_extracti32x4_epi32(W, U, A, imm) __extension__ ({ \ - (__m128i)__builtin_ia32_selectd_128((__mmask8)__U, \ + (__m128i)__builtin_ia32_selectd_128((__mmask8)(U), \ (__v4si)_mm512_extracti32x4_epi32((A), (imm)), \ - (__v4si)__W); }) + (__v4si)(W)); }) #define _mm512_maskz_extracti32x4_epi32(U, A, imm) __extension__ ({ \ - (__m128i)__builtin_ia32_selectd_128((__mmask8)__U, \ + (__m128i)__builtin_ia32_selectd_128((__mmask8)(U), \ (__v4si)_mm512_extracti32x4_epi32((A), (imm)), \ (__v4si)_mm_setzero_si128()); }) @@ -7878,12 +7878,12 @@ _mm512_mask_cvtepi64_storeu_epi16 (void *__P, __mmask8 __M, __m512i __A) ((imm) & 1) ? 7 : 3); }) #define _mm512_mask_extracti64x4_epi64(W, U, A, imm) __extension__ ({ \ - (__m256i)__builtin_ia32_selectq_256((__mmask8)__U, \ + (__m256i)__builtin_ia32_selectq_256((__mmask8)(U), \ (__v4di)_mm512_extracti64x4_epi64((A), (imm)), \ - (__v4di)__W); }) + (__v4di)(W)); }) #define _mm512_maskz_extracti64x4_epi64(U, A, imm) __extension__ ({ \ - (__m256i)__builtin_ia32_selectq_256((__mmask8)__U, \ + (__m256i)__builtin_ia32_selectq_256((__mmask8)(U), \ (__v4di)_mm512_extracti64x4_epi64((A), (imm)), \ (__v4di)_mm256_setzero_si256()); }) diff --git a/lib/Sema/SemaExpr.cpp b/lib/Sema/SemaExpr.cpp index 0077d6c539..de7739b92a 100644 --- a/lib/Sema/SemaExpr.cpp +++ b/lib/Sema/SemaExpr.cpp @@ -11659,7 +11659,7 @@ ExprResult Sema::CreateBuiltinUnaryOp(SourceLocation OpLoc, Context.getLangOpts().OpenCLVersion < 120) { // OpenCL v1.1 6.3.h: The logical operator not (!) does not // operate on scalar float types. - if (!resultType->isIntegerType()) + if (!resultType->isIntegerType() && !resultType->isPointerType()) return ExprError(Diag(OpLoc, diag::err_typecheck_unary_expr) << resultType << Input.get()->getSourceRange()); } diff --git a/test/CodeGenCXX/array-default-argument.cpp b/test/CodeGenCXX/array-default-argument.cpp new file mode 100644 index 0000000000..a07e390839 --- /dev/null +++ b/test/CodeGenCXX/array-default-argument.cpp @@ -0,0 +1,36 @@ +// RUN: %clang_cc1 -emit-llvm -o - %s -triple %itanium_abi_triple | FileCheck %s +// RUN: %clang_cc1 -emit-llvm -o - %s -triple %itanium_abi_triple -std=c++98 -fexceptions -fcxx-exceptions | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-EH + +struct A { + A(); + ~A(); +}; + +struct B { + B(A = A()); + ~B(); +}; + +void f(); +// CHECK-LABEL: define void @_Z1gv() +void g() { + // CHECK: br label %[[LOOP:.*]] + + // [[LOOP]]: + // CHECK: {{call|invoke}} {{.*}} @_ZN1AC1Ev([[TEMPORARY:.*]]) + // CHECK-EH: unwind label %[[PARTIAL_ARRAY_LPAD:.*]] + // CHECK: {{call|invoke}} {{.*}} @_ZN1BC1E1A({{.*}}, [[TEMPORARY]]) + // CHECK-EH: unwind label %[[A_AND_PARTIAL_ARRAY_LPAD:.*]] + // CHECK: {{call|invoke}} {{.*}} @_ZN1AD1Ev([[TEMPORARY]]) + // CHECK-EH: unwind label %[[PARTIAL_ARRAY_LPAD]] + // CHECK: getelementptr {{.*}}, i{{[0-9]*}} 1 + // CHECK: icmp eq + // CHECK: br i1 {{.*}} label %[[LOOP]] + B b[5]; + + // CHECK: {{call|invoke}} void @_Z1fv() + f(); + + // CHECK-NOT: @_ZN1AD1Ev( + // CHECK: {{call|invoke}} {{.*}} @_ZN1BD1Ev( +} diff --git a/test/CodeGenCXX/float128-declarations.cpp b/test/CodeGenCXX/float128-declarations.cpp index e1604a61ca..f1db8f41c6 100644 --- a/test/CodeGenCXX/float128-declarations.cpp +++ b/test/CodeGenCXX/float128-declarations.cpp @@ -8,6 +8,10 @@ // RUN: %s -o - | FileCheck %s -check-prefix=CHECK-X86 // RUN: %clang_cc1 -emit-llvm -triple systemz-unknown-linux-gnu -std=c++11 \ // RUN: %s -o - | FileCheck %s -check-prefix=CHECK-SYSZ +// RUN: %clang_cc1 -emit-llvm -triple i686-pc-openbsd -std=c++11 \ +// RUN: %s -o - | FileCheck %s -check-prefix=CHECK-X86 +// RUN: %clang_cc1 -emit-llvm -triple amd64-pc-openbsd -std=c++11 \ +// RUN: %s -o - | FileCheck %s -check-prefix=CHECK-X86 // /* Various contexts where type __float128 can appear. The different check prefixes are due to different mangling on X86 and different calling diff --git a/test/Driver/arm-abi.c b/test/Driver/arm-abi.c index 897c108048..ba5c4ba148 100644 --- a/test/Driver/arm-abi.c +++ b/test/Driver/arm-abi.c @@ -28,6 +28,10 @@ // RUN: %clang -target arm--netbsd-eabihf %s -### -o %t.o 2>&1 \ // RUN: | FileCheck -check-prefix=CHECK-AAPCS %s +// OpenBSD defaults to aapcs-linux +// RUN: %clang -target arm--openbsd- %s -### -o %t.o 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-AAPCS-LINUX %s + // Otherwise, ABI is selected based on environment // RUN: %clang -target arm---android %s -### -o %t.o 2>&1 \ // RUN: | FileCheck -check-prefix=CHECK-AAPCS-LINUX %s diff --git a/test/Driver/openbsd.c b/test/Driver/openbsd.c index 587c31ded0..b4e2796c5d 100644 --- a/test/Driver/openbsd.c +++ b/test/Driver/openbsd.c @@ -3,6 +3,12 @@ // CHECK-LD: clang{{.*}}" "-cc1" "-triple" "i686-pc-openbsd" // CHECK-LD: ld{{.*}}" "-e" "__start" "--eh-frame-hdr" "-Bdynamic" "-dynamic-linker" "{{.*}}ld.so" "-o" "a.out" "{{.*}}crt0.o" "{{.*}}crtbegin.o" "{{.*}}.o" "-lgcc" "-lc" "-lgcc" "{{.*}}crtend.o" +// Check for --eh-frame-hdr being passed with static linking +// RUN: %clang -no-canonical-prefixes -target i686-pc-openbsd -static %s -### 2>&1 \ +// RUN: | FileCheck --check-prefix=CHECK-LD-STATIC-EH %s +// CHECK-LD-STATIC-EH: clang{{.*}}" "-cc1" "-triple" "i686-pc-openbsd" +// CHECK-LD-STATIC-EH: ld{{.*}}" "-e" "__start" "--eh-frame-hdr" "-Bstatic" "-o" "a.out" "{{.*}}rcrt0.o" "{{.*}}crtbegin.o" "{{.*}}.o" "-lgcc" "-lc" "-lgcc" "{{.*}}crtend.o" + // RUN: %clang -no-canonical-prefixes -target i686-pc-openbsd -pg -pthread %s -### 2>&1 \ // RUN: | FileCheck --check-prefix=CHECK-PG %s // CHECK-PG: clang{{.*}}" "-cc1" "-triple" "i686-pc-openbsd" @@ -90,3 +96,8 @@ // CHECK-STATIC-PIE: "{{.*}}rcrt0.o" // CHECK-STATIC-PIE-NOT: "-nopie" // CHECK-NOPIE: "-nopie" "{{.*}}crt0.o" + +// Check ARM float ABI +// RUN: %clang -target arm-unknown-openbsd -### -c %s 2>&1 \ +// RUN: | FileCheck -check-prefix=CHECK-ARM-FLOAT-ABI %s +// CHECK-ARM-FLOAT-ABI: "-mfloat-abi" "soft" diff --git a/test/Driver/pic.c b/test/Driver/pic.c index 9f9d09c54c..61d752094f 100644 --- a/test/Driver/pic.c +++ b/test/Driver/pic.c @@ -227,6 +227,10 @@ // RUN: | FileCheck %s --check-prefix=CHECK-PIE1 // RUN: %clang -c %s -target i386-pc-openbsd -### 2>&1 \ // RUN: | FileCheck %s --check-prefix=CHECK-PIE1 +// RUN: %clang -c %s -target aarch64-unknown-openbsd -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-PIE1 +// RUN: %clang -c %s -target arm-unknown-openbsd -### 2>&1 \ +// RUN: | FileCheck %s --check-prefix=CHECK-PIE1 // RUN: %clang -c %s -target mips64-unknown-openbsd -### 2>&1 \ // RUN: | FileCheck %s --check-prefix=CHECK-PIE1 // RUN: %clang -c %s -target mips64el-unknown-openbsd -### 2>&1 \ diff --git a/test/Frontend/gnu-mcount.c b/test/Frontend/gnu-mcount.c index 690a103ed9..334e74a687 100644 --- a/test/Frontend/gnu-mcount.c +++ b/test/Frontend/gnu-mcount.c @@ -61,7 +61,7 @@ int f() { // CHECK-ARM-EABI-NETBSD-NOT: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="\01__gnu_mcount_nc"{{.*}} } // CHECK-ARM-EABI-OPENBSD: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="__mcount"{{.*}} } // CHECK-ARM-EABI-OPENBSD-NOT: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="\01__gnu_mcount_nc"{{.*}} } -// CHECK-ARM64-EABI-OPENBSD: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="mcount"{{.*}} } +// CHECK-ARM64-EABI-OPENBSD: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="__mcount"{{.*}} } // CHECK-ARM64-EABI-OPENBSD-NOT: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="\01__gnu_mcount_nc"{{.*}} } // CHECK-ARM-EABI-MEABI-GNU-NOT: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="mcount"{{.*}} } // CHECK-ARM-EABI-MEABI-GNU: attributes #{{[0-9]+}} = { {{.*}}"counting-function"="\01__gnu_mcount_nc"{{.*}} } diff --git a/test/Preprocessor/init.c b/test/Preprocessor/init.c index 8b8901931e..df7a8a8548 100644 --- a/test/Preprocessor/init.c +++ b/test/Preprocessor/init.c @@ -831,6 +831,198 @@ // AARCH64-NETBSD:#define __WINT_WIDTH__ 32 // AARCH64-NETBSD:#define __aarch64__ 1 // +// RUN: %clang_cc1 -E -dM -ffreestanding -triple=aarch64-openbsd < /dev/null | FileCheck -match-full-lines -check-prefix AARCH64-OPENBSD %s +// +// AARCH64-OPENBSD:#define _LP64 1 +// AARCH64-OPENBSD-NOT:#define __AARCH64EB__ 1 +// AARCH64-OPENBSD:#define __AARCH64EL__ 1 +// AARCH64-OPENBSD-NOT:#define __AARCH_BIG_ENDIAN 1 +// AARCH64-OPENBSD:#define __ARM_64BIT_STATE 1 +// AARCH64-OPENBSD:#define __ARM_ARCH 8 +// AARCH64-OPENBSD:#define __ARM_ARCH_ISA_A64 1 +// AARCH64-OPENBSD-NOT:#define __ARM_BIG_ENDIAN 1 +// AARCH64-OPENBSD:#define __BIGGEST_ALIGNMENT__ 16 +// AARCH64-OPENBSD:#define __BYTE_ORDER__ __ORDER_LITTLE_ENDIAN__ +// AARCH64-OPENBSD:#define __CHAR16_TYPE__ unsigned short +// AARCH64-OPENBSD:#define __CHAR32_TYPE__ unsigned int +// AARCH64-OPENBSD:#define __CHAR_BIT__ 8 +// AARCH64-OPENBSD:#define __DBL_DENORM_MIN__ 4.9406564584124654e-324 +// AARCH64-OPENBSD:#define __DBL_DIG__ 15 +// AARCH64-OPENBSD:#define __DBL_EPSILON__ 2.2204460492503131e-16 +// AARCH64-OPENBSD:#define __DBL_HAS_DENORM__ 1 +// AARCH64-OPENBSD:#define __DBL_HAS_INFINITY__ 1 +// AARCH64-OPENBSD:#define __DBL_HAS_QUIET_NAN__ 1 +// AARCH64-OPENBSD:#define __DBL_MANT_DIG__ 53 +// AARCH64-OPENBSD:#define __DBL_MAX_10_EXP__ 308 +// AARCH64-OPENBSD:#define __DBL_MAX_EXP__ 1024 +// AARCH64-OPENBSD:#define __DBL_MAX__ 1.7976931348623157e+308 +// AARCH64-OPENBSD:#define __DBL_MIN_10_EXP__ (-307) +// AARCH64-OPENBSD:#define __DBL_MIN_EXP__ (-1021) +// AARCH64-OPENBSD:#define __DBL_MIN__ 2.2250738585072014e-308 +// AARCH64-OPENBSD:#define __DECIMAL_DIG__ __LDBL_DECIMAL_DIG__ +// AARCH64-OPENBSD:#define __ELF__ 1 +// AARCH64-OPENBSD:#define __FLT_DENORM_MIN__ 1.40129846e-45F +// AARCH64-OPENBSD:#define __FLT_DIG__ 6 +// AARCH64-OPENBSD:#define __FLT_EPSILON__ 1.19209290e-7F +// AARCH64-OPENBSD:#define __FLT_EVAL_METHOD__ 0 +// AARCH64-OPENBSD:#define __FLT_HAS_DENORM__ 1 +// AARCH64-OPENBSD:#define __FLT_HAS_INFINITY__ 1 +// AARCH64-OPENBSD:#define __FLT_HAS_QUIET_NAN__ 1 +// AARCH64-OPENBSD:#define __FLT_MANT_DIG__ 24 +// AARCH64-OPENBSD:#define __FLT_MAX_10_EXP__ 38 +// AARCH64-OPENBSD:#define __FLT_MAX_EXP__ 128 +// AARCH64-OPENBSD:#define __FLT_MAX__ 3.40282347e+38F +// AARCH64-OPENBSD:#define __FLT_MIN_10_EXP__ (-37) +// AARCH64-OPENBSD:#define __FLT_MIN_EXP__ (-125) +// AARCH64-OPENBSD:#define __FLT_MIN__ 1.17549435e-38F +// AARCH64-OPENBSD:#define __FLT_RADIX__ 2 +// AARCH64-OPENBSD:#define __INT16_C_SUFFIX__ +// AARCH64-OPENBSD:#define __INT16_FMTd__ "hd" +// AARCH64-OPENBSD:#define __INT16_FMTi__ "hi" +// AARCH64-OPENBSD:#define __INT16_MAX__ 32767 +// AARCH64-OPENBSD:#define __INT16_TYPE__ short +// AARCH64-OPENBSD:#define __INT32_C_SUFFIX__ +// AARCH64-OPENBSD:#define __INT32_FMTd__ "d" +// AARCH64-OPENBSD:#define __INT32_FMTi__ "i" +// AARCH64-OPENBSD:#define __INT32_MAX__ 2147483647 +// AARCH64-OPENBSD:#define __INT32_TYPE__ int +// AARCH64-OPENBSD:#define __INT64_C_SUFFIX__ LL +// AARCH64-OPENBSD:#define __INT64_FMTd__ "lld" +// AARCH64-OPENBSD:#define __INT64_FMTi__ "lli" +// AARCH64-OPENBSD:#define __INT64_MAX__ 9223372036854775807LL +// AARCH64-OPENBSD:#define __INT64_TYPE__ long long int +// AARCH64-OPENBSD:#define __INT8_C_SUFFIX__ +// AARCH64-OPENBSD:#define __INT8_FMTd__ "hhd" +// AARCH64-OPENBSD:#define __INT8_FMTi__ "hhi" +// AARCH64-OPENBSD:#define __INT8_MAX__ 127 +// AARCH64-OPENBSD:#define __INT8_TYPE__ signed char +// AARCH64-OPENBSD:#define __INTMAX_C_SUFFIX__ LL +// AARCH64-OPENBSD:#define __INTMAX_FMTd__ "lld" +// AARCH64-OPENBSD:#define __INTMAX_FMTi__ "lli" +// AARCH64-OPENBSD:#define __INTMAX_MAX__ 9223372036854775807LL +// AARCH64-OPENBSD:#define __INTMAX_TYPE__ long long int +// AARCH64-OPENBSD:#define __INTMAX_WIDTH__ 64 +// AARCH64-OPENBSD:#define __INTPTR_FMTd__ "ld" +// AARCH64-OPENBSD:#define __INTPTR_FMTi__ "li" +// AARCH64-OPENBSD:#define __INTPTR_MAX__ 9223372036854775807L +// AARCH64-OPENBSD:#define __INTPTR_TYPE__ long int +// AARCH64-OPENBSD:#define __INTPTR_WIDTH__ 64 +// AARCH64-OPENBSD:#define __INT_FAST16_FMTd__ "hd" +// AARCH64-OPENBSD:#define __INT_FAST16_FMTi__ "hi" +// AARCH64-OPENBSD:#define __INT_FAST16_MAX__ 32767 +// AARCH64-OPENBSD:#define __INT_FAST16_TYPE__ short +// AARCH64-OPENBSD:#define __INT_FAST32_FMTd__ "d" +// AARCH64-OPENBSD:#define __INT_FAST32_FMTi__ "i" +// AARCH64-OPENBSD:#define __INT_FAST32_MAX__ 2147483647 +// AARCH64-OPENBSD:#define __INT_FAST32_TYPE__ int +// AARCH64-OPENBSD:#define __INT_FAST64_FMTd__ "ld" +// AARCH64-OPENBSD:#define __INT_FAST64_FMTi__ "li" +// AARCH64-OPENBSD:#define __INT_FAST64_MAX__ 9223372036854775807L +// AARCH64-OPENBSD:#define __INT_FAST64_TYPE__ long int +// AARCH64-OPENBSD:#define __INT_FAST8_FMTd__ "hhd" +// AARCH64-OPENBSD:#define __INT_FAST8_FMTi__ "hhi" +// AARCH64-OPENBSD:#define __INT_FAST8_MAX__ 127 +// AARCH64-OPENBSD:#define __INT_FAST8_TYPE__ signed char +// AARCH64-OPENBSD:#define __INT_LEAST16_FMTd__ "hd" +// AARCH64-OPENBSD:#define __INT_LEAST16_FMTi__ "hi" +// AARCH64-OPENBSD:#define __INT_LEAST16_MAX__ 32767 +// AARCH64-OPENBSD:#define __INT_LEAST16_TYPE__ short +// AARCH64-OPENBSD:#define __INT_LEAST32_FMTd__ "d" +// AARCH64-OPENBSD:#define __INT_LEAST32_FMTi__ "i" +// AARCH64-OPENBSD:#define __INT_LEAST32_MAX__ 2147483647 +// AARCH64-OPENSD:#define __INT_LEAST32_TYPE__ int +// AARCH64-OPENBSD:#define __INT_LEAST64_FMTd__ "ld" +// AARCH64-OPENBSD:#define __INT_LEAST64_FMTi__ "li" +// AARCH64-OPENBSD:#define __INT_LEAST64_MAX__ 9223372036854775807L +// AARCH64-OPENBSD:#define __INT_LEAST64_TYPE__ long int +// AARCH64-OPENBSD:#define __INT_LEAST8_FMTd__ "hhd" +// AARCH64-OPENBSD:#define __INT_LEAST8_FMTi__ "hhi" +// AARCH64-OPENBSD:#define __INT_LEAST8_MAX__ 127 +// AARCH64-OPENBSD:#define __INT_LEAST8_TYPE__ signed char +// AARCH64-OPENBSD:#define __INT_MAX__ 2147483647 +// AARCH64-OPENBSD:#define __LDBL_DENORM_MIN__ 6.47517511943802511092443895822764655e-4966L +// AARCH64-OPENBSD:#define __LDBL_DIG__ 33 +// AARCH64-OPENBSD:#define __LDBL_EPSILON__ 1.92592994438723585305597794258492732e-34L +// AARCH64-OPENBSD:#define __LDBL_HAS_DENORM__ 1 +// AARCH64-OPENBSD:#define __LDBL_HAS_INFINITY__ 1 +// AARCH64-OPENBSD:#define __LDBL_HAS_QUIET_NAN__ 1 +// AARCH64-OPENBSD:#define __LDBL_MANT_DIG__ 113 +// AARCH64-OPENBSD:#define __LDBL_MAX_10_EXP__ 4932 +// AARCH64-OPENBSD:#define __LDBL_MAX_EXP__ 16384 +// AARCH64-OPENBSD:#define __LDBL_MAX__ 1.18973149535723176508575932662800702e+4932L +// AARCH64-OPENBSD:#define __LDBL_MIN_10_EXP__ (-4931) +// AARCH64-OPENBSD:#define __LDBL_MIN_EXP__ (-16381) +// AARCH64-OPENBSD:#define __LDBL_MIN__ 3.36210314311209350626267781732175260e-4932L +// AARCH64-OPENBSD:#define __LITTLE_ENDIAN__ 1 +// AARCH64-OPENBSD:#define __LONG_LONG_MAX__ 9223372036854775807LL +// AARCH64-OPENBSD:#define __LONG_MAX__ 9223372036854775807L +// AARCH64-OPENBSD:#define __LP64__ 1 +// AARCH64-OPENBSD:#define __OpenBSD__ 1 +// AARCH64-OPENBSD:#define __POINTER_WIDTH__ 64 +// AARCH64-OPENBSD:#define __PTRDIFF_TYPE__ long int +// AARCH64-OPENBSD:#define __PTRDIFF_WIDTH__ 64 +// AARCH64-OPENBSD:#define __SCHAR_MAX__ 127 +// AARCH64-OPENBSD:#define __SHRT_MAX__ 32767 +// AARCH64-OPENBSD:#define __SIG_ATOMIC_MAX__ 2147483647 +// AARCH64-OPENBSD:#define __SIG_ATOMIC_WIDTH__ 32 +// AARCH64-OPENBSD:#define __SIZEOF_DOUBLE__ 8 +// AARCH64-OPENBSD:#define __SIZEOF_FLOAT__ 4 +// AARCH64-OPENBSD:#define __SIZEOF_INT__ 4 +// AARCH64-OPENBSD:#define __SIZEOF_LONG_DOUBLE__ 16 +// AARCH64-OPENBSD:#define __SIZEOF_LONG_LONG__ 8 +// AARCH64-OPENBSD:#define __SIZEOF_LONG__ 8 +// AARCH64-OPENBSD:#define __SIZEOF_POINTER__ 8 +// AARCH64-OPENBSD:#define __SIZEOF_PTRDIFF_T__ 8 +// AARCH64-OPENBSD:#define __SIZEOF_SHORT__ 2 +// AARCH64-OPENBSD:#define __SIZEOF_SIZE_T__ 8 +// AARCH64-OPENBSD:#define __SIZEOF_WCHAR_T__ 4 +// AARCH64-OPENBSD:#define __SIZEOF_WINT_T__ 4 +// AARCH64-OPENBSD:#define __SIZE_MAX__ 18446744073709551615UL +// AARCH64-OPENBSD:#define __SIZE_TYPE__ long unsigned int +// AARCH64-OPENBSD:#define __SIZE_WIDTH__ 64 +// AARCH64-OPENBSD:#define __UINT16_C_SUFFIX__ +// AARCH64-OPENBSD:#define __UINT16_MAX__ 65535 +// AARCH64-OPENBSD:#define __UINT16_TYPE__ unsigned short +// AARCH64-OPENBSD:#define __UINT32_C_SUFFIX__ U +// AARCH64-OPENBSD:#define __UINT32_MAX__ 4294967295U +// AARCH64-OPENBSD:#define __UINT32_TYPE__ unsigned int +// AARCH64-OPENBSD:#define __UINT64_C_SUFFIX__ ULL +// AARCH64-OPENBSD:#define __UINT64_MAX__ 18446744073709551615ULL +// AARCH64-OPENBSD:#define __UINT64_TYPE__ long long unsigned int +// AARCH64-OPENBSD:#define __UINT8_C_SUFFIX__ +// AARCH64-OPENBSD:#define __UINT8_MAX__ 255 +// AARCH64-OPENBSD:#define __UINT8_TYPE__ unsigned char +// AARCH64-OPENBSD:#define __UINTMAX_C_SUFFIX__ ULL +// AARCH64-OPENBSD:#define __UINTMAX_MAX__ 18446744073709551615ULL +// AARCH64-OPENBSD:#define __UINTMAX_TYPE__ long long unsigned int +// AARCH64-OPENBSD:#define __UINTMAX_WIDTH__ 64 +// AARCH64-OPENBSD:#define __UINTPTR_MAX__ 18446744073709551615UL +// AARCH64-OPENBSD:#define __UINTPTR_TYPE__ long unsigned int +// AARCH64-OPENBSD:#define __UINTPTR_WIDTH__ 64 +// AARCH64-OPENBSD:#define __UINT_FAST16_MAX__ 65535 +// AARCH64-OPENBSD:#define __UINT_FAST16_TYPE__ unsigned short +// AARCH64-OPENBSD:#define __UINT_FAST32_MAX__ 4294967295U +// AARCH64-OPENBSD:#define __UINT_FAST32_TYPE__ unsigned int +// AARCH64-OPENBSD:#define __UINT_FAST64_MAX__ 18446744073709551615UL +// AARCH64-OPENBSD:#define __UINT_FAST64_TYPE__ long unsigned int +// AARCH64-OPENBSD:#define __UINT_FAST8_MAX__ 255 +// AARCH64-OPENBSD:#define __UINT_FAST8_TYPE__ unsigned char +// AARCH64-OPENBSD:#define __UINT_LEAST16_MAX__ 65535 +// AARCH64-OPENBSD:#define __UINT_LEAST16_TYPE__ unsigned short +// AARCH64-OPENBSD:#define __UINT_LEAST32_MAX__ 4294967295U +// AARCH64-OPENBSD:#define __UINT_LEAST32_TYPE__ unsigned int +// AARCH64-OPENBSD:#define __UINT_LEAST64_MAX__ 18446744073709551615UL +// AARCH64-OPENBSD:#define __UINT_LEAST64_TYPE__ long unsigned int +// AARCH64-OPENBSD:#define __UINT_LEAST8_MAX__ 255 +// AARCH64-OPENBSD:#define __UINT_LEAST8_TYPE__ unsigned char +// AARCH64-OPENBSD:#define __USER_LABEL_PREFIX__ +// AARCH64-OPENBSD:#define __WCHAR_MAX__ 2147483647 +// AARCH64-OPENBSD:#define __WCHAR_TYPE__ int +// AARCH64-OPENBSD:#define __WCHAR_WIDTH__ 32 +// AARCH64-OPENBSD:#define __WINT_TYPE__ int +// AARCH64-OPENBSD:#define __WINT_WIDTH__ 32 +// AARCH64-OPENBSD:#define __aarch64__ 1 +// // RUN: %clang_cc1 -E -dM -ffreestanding -triple=aarch64-freebsd11 < /dev/null | FileCheck -match-full-lines -check-prefix AARCH64-FREEBSD %s // // AARCH64-FREEBSD:#define _LP64 1 @@ -8523,8 +8715,11 @@ // LANAI: #define __lanai__ 1 // // RUN: %clang_cc1 -E -dM -ffreestanding -triple=amd64-unknown-openbsd6.1 < /dev/null | FileCheck -match-full-lines -check-prefix OPENBSD %s +// RUN: %clang_cc1 -E -dM -ffreestanding -triple=aarch64-unknown-openbsd6.1 < /dev/null | FileCheck -match-full-lines -check-prefix OPENBSD %s // RUN: %clang_cc1 -E -dM -ffreestanding -triple=arm-unknown-openbsd6.1-gnueabi < /dev/null | FileCheck -match-full-lines -check-prefix OPENBSD %s // RUN: %clang_cc1 -E -dM -ffreestanding -triple=i386-unknown-openbsd6.1 < /dev/null | FileCheck -match-full-lines -check-prefix OPENBSD %s +// RUN: %clang_cc1 -E -dM -ffreestanding -triple=mips64-unknown-openbsd6.1 < /dev/null | FileCheck -match-full-lines -check-prefix OPENBSD %s +// RUN: %clang_cc1 -E -dM -ffreestanding -triple=mips64el-unknown-openbsd6.1 < /dev/null | FileCheck -match-full-lines -check-prefix OPENBSD %s // RUN: %clang_cc1 -E -dM -ffreestanding -triple=sparc64-unknown-openbsd6.1 < /dev/null | FileCheck -match-full-lines -check-prefix OPENBSD %s // OPENBSD:#define __ELF__ 1 // OPENBSD:#define __INT16_TYPE__ short diff --git a/test/SemaOpenCL/invalid-logical-ops-1.1.cl b/test/SemaOpenCL/invalid-logical-ops-1.1.cl deleted file mode 100644 index 2269dd322b..0000000000 --- a/test/SemaOpenCL/invalid-logical-ops-1.1.cl +++ /dev/null @@ -1,57 +0,0 @@ -// RUN: %clang_cc1 %s -verify -cl-std=CL1.1 -triple x86_64-unknown-linux-gnu - -#pragma OPENCL EXTENSION cl_khr_fp64 : enable -typedef __attribute__((ext_vector_type(4))) float float4; -typedef __attribute__((ext_vector_type(4))) double double4; -typedef __attribute__((ext_vector_type(4))) int int4; -typedef __attribute__((ext_vector_type(4))) long long4; - -kernel void float_ops() { - int flaf = 0.0f && 0.0f; // expected-error {{invalid operands}} - int flof = 0.0f || 0.0f; // expected-error {{invalid operands}} - float fbaf = 0.0f & 0.0f; // expected-error {{invalid operands}} - float fbof = 0.0f | 0.0f; // expected-error {{invalid operands}} - float fbxf = 0.0f ^ 0.0f; // expected-error {{invalid operands}} - int flai = 0.0f && 0; // expected-error {{invalid operands}} - int floi = 0.0f || 0; // expected-error {{invalid operands}} - float ibaf = 0 & 0.0f; // expected-error {{invalid operands}} - float ibof = 0 | 0.0f; // expected-error {{invalid operands}} - float bnf = ~0.0f; // expected-error {{invalid argument type}} - float lnf = !0.0f; // expected-error {{invalid argument type}} -} - -kernel void vec_float_ops() { - float4 f4 = (float4)(0, 0, 0, 0); - int4 f4laf = f4 && 0.0f; // expected-error {{invalid operands}} - int4 f4lof = f4 || 0.0f; // expected-error {{invalid operands}} - float4 f4baf = f4 & 0.0f; // expected-error {{invalid operands}} - float4 f4bof = f4 | 0.0f; // expected-error {{invalid operands}} - float4 f4bxf = f4 ^ 0.0f; // expected-error {{invalid operands}} - float bnf4 = ~f4; // expected-error {{invalid argument type}} - int4 lnf4 = !f4; // expected-error {{invalid argument type}} -} - -kernel void double_ops() { - int flaf = 0.0 && 0.0; // expected-error {{invalid operands}} - int flof = 0.0 || 0.0; // expected-error {{invalid operands}} - double fbaf = 0.0 & 0.0; // expected-error {{invalid operands}} - double fbof = 0.0 | 0.0; // expected-error {{invalid operands}} - double fbxf = 0.0 ^ 0.0; // expected-error {{invalid operands}} - int flai = 0.0 && 0; // expected-error {{invalid operands}} - int floi = 0.0 || 0; // expected-error {{invalid operands}} - double ibaf = 0 & 0.0; // expected-error {{invalid operands}} - double ibof = 0 | 0.0; // expected-error {{invalid operands}} - double bnf = ~0.0; // expected-error {{invalid argument type}} - double lnf = !0.0; // expected-error {{invalid argument type}} -} - -kernel void vec_double_ops() { - double4 f4 = (double4)(0, 0, 0, 0); - long4 f4laf = f4 && 0.0; // expected-error {{invalid operands}} - long4 f4lof = f4 || 0.0; // expected-error {{invalid operands}} - double4 f4baf = f4 & 0.0; // expected-error {{invalid operands}} - double4 f4bof = f4 | 0.0; // expected-error {{invalid operands}} - double4 f4bxf = f4 ^ 0.0; // expected-error {{invalid operands}} - double bnf4 = ~f4; // expected-error {{invalid argument type}} - long4 lnf4 = !f4; // expected-error {{invalid argument type}} -} diff --git a/test/SemaOpenCL/invalid-logical-ops-1.2.cl b/test/SemaOpenCL/logical-ops.cl similarity index 59% rename from test/SemaOpenCL/invalid-logical-ops-1.2.cl rename to test/SemaOpenCL/logical-ops.cl index bee52396cc..42501b1441 100644 --- a/test/SemaOpenCL/invalid-logical-ops-1.2.cl +++ b/test/SemaOpenCL/logical-ops.cl @@ -1,4 +1,6 @@ +// RUN: %clang_cc1 %s -verify -cl-std=CL1.1 -triple x86_64-unknown-linux-gnu // RUN: %clang_cc1 %s -verify -cl-std=CL1.2 -triple x86_64-unknown-linux-gnu +// RUN: %clang_cc1 %s -verify -cl-std=CL2.0 -triple x86_64-unknown-linux-gnu #pragma OPENCL EXTENSION cl_khr_fp64 : enable @@ -9,50 +11,107 @@ typedef __attribute__((ext_vector_type(4))) long long4; kernel void float_ops() { int flaf = 0.0f && 0.0f; +#if __OPENCL_C_VERSION__ < 120 +// expected-error@-2{{invalid operands}} +#endif int flof = 0.0f || 0.0f; +#if __OPENCL_C_VERSION__ < 120 +// expected-error@-2{{invalid operands}} +#endif float fbaf = 0.0f & 0.0f; // expected-error {{invalid operands}} float fbof = 0.0f | 0.0f; // expected-error {{invalid operands}} float fbxf = 0.0f ^ 0.0f; // expected-error {{invalid operands}} int flai = 0.0f && 0; +#if __OPENCL_C_VERSION__ < 120 +// expected-error@-2{{invalid operands}} +#endif int floi = 0.0f || 0; +#if __OPENCL_C_VERSION__ < 120 +// expected-error@-2{{invalid operands}} +#endif float ibaf = 0 & 0.0f; // expected-error {{invalid operands}} float ibof = 0 | 0.0f; // expected-error {{invalid operands}} float bnf = ~0.0f;// expected-error {{invalid argument type}} float lnf = !0.0f; +#if __OPENCL_C_VERSION__ < 120 +// expected-error@-2{{invalid argument type}} +#endif } kernel void vec_float_ops() { float4 f4 = (float4)(0, 0, 0, 0); int4 f4laf = f4 && 0.0f; +#if __OPENCL_C_VERSION__ < 120 +// expected-error@-2{{invalid operands}} +#endif int4 f4lof = f4 || 0.0f; +#if __OPENCL_C_VERSION__ < 120 +// expected-error@-2{{invalid operands}} +#endif float4 f4baf = f4 & 0.0f; // expected-error {{invalid operands}} float4 f4bof = f4 | 0.0f; // expected-error {{invalid operands}} float4 f4bxf = f4 ^ 0.0f; // expected-error {{invalid operands}} float bnf4 = ~f4; // expected-error {{invalid argument type}} int4 lnf4 = !f4; +#if __OPENCL_C_VERSION__ < 120 +// expected-error@-2{{invalid argument type}} +#endif } kernel void double_ops() { int flaf = 0.0 && 0.0; +#if __OPENCL_C_VERSION__ < 120 +// expected-error@-2{{invalid operands}} +#endif int flof = 0.0 || 0.0; +#if __OPENCL_C_VERSION__ < 120 +// expected-error@-2{{invalid operands}} +#endif double fbaf = 0.0 & 0.0; // expected-error {{invalid operands}} double fbof = 0.0 | 0.0; // expected-error {{invalid operands}} double fbxf = 0.0 ^ 0.0; // expected-error {{invalid operands}} int flai = 0.0 && 0; +#if __OPENCL_C_VERSION__ < 120 +// expected-error@-2{{invalid operands}} +#endif int floi = 0.0 || 0; +#if __OPENCL_C_VERSION__ < 120 +// expected-error@-2{{invalid operands}} +#endif double ibaf = 0 & 0.0; // expected-error {{invalid operands}} double ibof = 0 | 0.0; // expected-error {{invalid operands}} double bnf = ~0.0; // expected-error {{invalid argument type}} double lnf = !0.0; +#if __OPENCL_C_VERSION__ < 120 +// expected-error@-2{{invalid argument type}} +#endif } kernel void vec_double_ops() { double4 f4 = (double4)(0, 0, 0, 0); long4 f4laf = f4 && 0.0; +#if __OPENCL_C_VERSION__ < 120 +// expected-error@-2{{invalid operands}} +#endif long4 f4lof = f4 || 0.0; +#if __OPENCL_C_VERSION__ < 120 +// expected-error@-2{{invalid operands}} +#endif double4 f4baf = f4 & 0.0; // expected-error {{invalid operands}} double4 f4bof = f4 | 0.0; // expected-error {{invalid operands}} double4 f4bxf = f4 ^ 0.0; // expected-error {{invalid operands}} double bnf4 = ~f4; // expected-error {{invalid argument type}} long4 lnf4 = !f4; +#if __OPENCL_C_VERSION__ < 120 +// expected-error@-2{{invalid argument type}} +#endif +} + +kernel void pointer_ops(){ + global int* p; + bool b = !p; + b = p==0; + int i; + b = !&i; + b = &i==(int *)1; } diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index b402b5c4a5..fb14a6b7c1 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -11053,6 +11053,20 @@ TEST_F(FormatTest, AllignTrailingComments) { "/* comment 3 */ \\\n", getLLVMStyleWithColumns(40))); } + +TEST_F(FormatTest, UTF8CharacterLiteralCpp03) { + format::FormatStyle Style = format::getLLVMStyle(); + Style.Standard = FormatStyle::LS_Cpp03; + // cpp03 recognize this string as identifier u8 and literal character 'a' + EXPECT_EQ("auto c = u8 'a';", format("auto c = u8'a';", Style)); +} + +TEST_F(FormatTest, UTF8CharacterLiteralCpp11) { + // u8'a' is a C++17 feature, utf8 literal character, LS_Cpp11 covers + // all modes, including C++11, C++14 and C++17 + EXPECT_EQ("auto c = u8'a';", format("auto c = u8'a';")); +} + } // end namespace } // end namespace format } // end namespace clang