From d0e1be524651d52d78ea36a51269e36b9c74602e Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Tue, 4 Apr 2017 00:28:56 +0000 Subject: [PATCH 01/13] Merging r299346: ------------------------------------------------------------------------ r299346 | ctopper | 2017-04-02 20:41:29 -0700 (Sun, 02 Apr 2017) | 3 lines [AVX-512] Fix some intrinsic macros that use the wrong macro parameter names and don't have parentheses around them. Thanks to Matthew Barr for reporting this issue. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_40@299404 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Headers/avx512fintrin.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/Headers/avx512fintrin.h b/lib/Headers/avx512fintrin.h index e6a7217c89..b83f881b20 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); }) #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); }) #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()); }) From 80c73a33bd1e0ec3a579053010f16cfd15c13db0 Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Tue, 4 Apr 2017 00:31:22 +0000 Subject: [PATCH 02/13] Merging r299347: ------------------------------------------------------------------------ r299347 | ctopper | 2017-04-02 20:51:57 -0700 (Sun, 02 Apr 2017) | 1 line [AVX-512] Fix a couple more intrinsic macros I missed in r299346. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_40@299405 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Headers/avx512fintrin.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Headers/avx512fintrin.h b/lib/Headers/avx512fintrin.h index b83f881b20..4f4aa5cd6b 100644 --- a/lib/Headers/avx512fintrin.h +++ b/lib/Headers/avx512fintrin.h @@ -7862,7 +7862,7 @@ _mm512_mask_cvtepi64_storeu_epi16 (void *__P, __mmask8 __M, __m512i __A) #define _mm512_mask_extracti32x4_epi32(W, U, A, imm) __extension__ ({ \ (__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), \ @@ -7880,7 +7880,7 @@ _mm512_mask_cvtepi64_storeu_epi16 (void *__P, __mmask8 __M, __m512i __A) #define _mm512_mask_extracti64x4_epi64(W, U, A, imm) __extension__ ({ \ (__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), \ From 469eeae0ec737189647c60744dd8b9b0e323cc9f Mon Sep 17 00:00:00 2001 From: Brad Smith Date: Sat, 22 Apr 2017 16:45:56 +0000 Subject: [PATCH 03/13] Merging r295614: ------------------------------------------------------------------------ r295614 | brad | 2017-02-19 15:11:48 -0500 (Sun, 19 Feb 2017) | 2 lines Always use --eh-frame-hdr on OpenBSD, even for -static ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_40@301083 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Driver/Tools.cpp | 2 +- test/Driver/openbsd.c | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 3c3d453ff7..0ed8212984 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -8907,12 +8907,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/test/Driver/openbsd.c b/test/Driver/openbsd.c index 587c31ded0..4160fbb767 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" From e3fa40be2025cdf4fd3090139768ef8842d62c9a Mon Sep 17 00:00:00 2001 From: Brad Smith Date: Sat, 22 Apr 2017 16:53:19 +0000 Subject: [PATCH 04/13] Merging r295635: ------------------------------------------------------------------------ r295635 | brad | 2017-02-19 22:18:15 -0500 (Sun, 19 Feb 2017) | 5 lines Enable support for __float128 in Clang on OpenBSD/X86 /usr/local/include/c++/4.9.4/type_traits:279:39: error: __float128 is not supported on this target ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_40@301084 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Basic/Targets.cpp | 8 +++++--- test/CodeGenCXX/float128-declarations.cpp | 4 ++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index 1a95ff2681..511bce94b0 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: 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 From 86a3750c3c209d591600c095124265f66c9e908c Mon Sep 17 00:00:00 2001 From: Brad Smith Date: Sat, 22 Apr 2017 17:05:51 +0000 Subject: [PATCH 05/13] Merging r295786: ------------------------------------------------------------------------ r295786 | brad | 2017-02-21 18:13:09 -0500 (Tue, 21 Feb 2017) | 2 lines Hook up OpenBSD AArch64 support ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_40@301085 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Basic/Targets.cpp | 5 +- test/Frontend/gnu-mcount.c | 2 +- test/Preprocessor/init.c | 193 +++++++++++++++++++++++++++++++++++++ 3 files changed, 198 insertions(+), 2 deletions(-) diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index 511bce94b0..0c94b88a98 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -5927,7 +5927,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 @@ -8576,6 +8577,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/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..bb545b2e8f 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,6 +8715,7 @@ // 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=sparc64-unknown-openbsd6.1 < /dev/null | FileCheck -match-full-lines -check-prefix OPENBSD %s From c82a481e77cbeeebb53de2ad64de816e96cbcaea Mon Sep 17 00:00:00 2001 From: Brad Smith Date: Sat, 22 Apr 2017 17:15:15 +0000 Subject: [PATCH 06/13] Merging r296430: ------------------------------------------------------------------------ r296430 | brad | 2017-02-27 22:20:26 -0500 (Mon, 27 Feb 2017) | 2 lines Set ABIs correctly for OpenBSD/arm; soft float and aapcs-linux. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_40@301086 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Basic/Targets.cpp | 2 ++ lib/Driver/Tools.cpp | 6 ++++++ test/Driver/arm-abi.c | 4 ++++ test/Driver/openbsd.c | 5 +++++ 4 files changed, 17 insertions(+) diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index 0c94b88a98..a8890b7ef8 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -5146,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; diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index 0ed8212984..f53de3eed8 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -962,6 +962,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: @@ -1251,6 +1255,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; 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 4160fbb767..b4e2796c5d 100644 --- a/test/Driver/openbsd.c +++ b/test/Driver/openbsd.c @@ -96,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" From 000bee063ea28cbabca5569c722b82d936991396 Mon Sep 17 00:00:00 2001 From: Brad Smith Date: Sat, 22 Apr 2017 17:20:27 +0000 Subject: [PATCH 07/13] Merging r299269: ------------------------------------------------------------------------ r299269 | brad | 2017-03-31 18:13:17 -0400 (Fri, 31 Mar 2017) | 2 lines Add/update PIE defaults for OpenBSD. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_40@301087 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Driver/Tools.cpp | 4 +++- test/Driver/pic.c | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/Driver/Tools.cpp b/lib/Driver/Tools.cpp index f53de3eed8..4d4a8c2428 100644 --- a/lib/Driver/Tools.cpp +++ b/lib/Driver/Tools.cpp @@ -3851,9 +3851,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" @@ -3861,6 +3862,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; 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 \ From 555e77c84b2712de80610d3e1c851b5a2f182372 Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Wed, 26 Apr 2017 20:48:39 +0000 Subject: [PATCH 08/13] Merging r299574: ------------------------------------------------------------------------ r299574 | nico | 2017-04-05 14:10:42 -0400 (Wed, 05 Apr 2017) | 17 lines clang-format: Support formatting utf-8 character literals in C++11+ mode. clang-format <! ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_40@301463 91177308-0d34-0410-b5e6-96231b3b80d8 --- docs/ClangFormatStyleOptions.rst | 3 ++- include/clang/Format/Format.h | 3 ++- lib/Format/Format.cpp | 1 + unittests/Format/FormatTest.cpp | 14 ++++++++++++++ 4 files changed, 19 insertions(+), 2 deletions(-) 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/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/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/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 From 6f1871cebb5ec9a3950bdb44dfa030dd2b4c05ec Mon Sep 17 00:00:00 2001 From: Brad Smith Date: Fri, 28 Apr 2017 00:36:13 +0000 Subject: [PATCH 09/13] Merging r297098: ------------------------------------------------------------------------ r297098 | brad | 2017-03-06 18:48:31 -0500 (Mon, 06 Mar 2017) | 2 lines Set the Int64Type / IntMaxType types correctly for OpenBSD/mips64 ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_40@301605 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Basic/Targets.cpp | 6 +++++- test/Preprocessor/init.c | 2 ++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp index a8890b7ef8..445b4120ef 100644 --- a/lib/Basic/Targets.cpp +++ b/lib/Basic/Targets.cpp @@ -7540,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; diff --git a/test/Preprocessor/init.c b/test/Preprocessor/init.c index bb545b2e8f..df7a8a8548 100644 --- a/test/Preprocessor/init.c +++ b/test/Preprocessor/init.c @@ -8718,6 +8718,8 @@ // 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 From d9ff11a2c98fd83a55ca1c572edd63d56c56c017 Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Tue, 16 May 2017 12:00:44 +0000 Subject: [PATCH 10/13] Merging r294313: ------------------------------------------------------------------------ r294313 | stulova | 2017-02-07 11:09:41 -0500 (Tue, 07 Feb 2017) | 9 lines [OpenCL] Accept logical NOT for pointer types in CL1.1 Fix for bug 30217 - incorrect error given for logical NOT operation with a pointer type: corrected sema check and improved related tests. Review: D29038 ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_40@303161 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Sema/SemaExpr.cpp | 2 +- test/SemaOpenCL/invalid-logical-ops-1.1.cl | 57 ------------------ ...alid-logical-ops-1.2.cl => logical-ops.cl} | 59 +++++++++++++++++++ 3 files changed, 60 insertions(+), 58 deletions(-) delete mode 100644 test/SemaOpenCL/invalid-logical-ops-1.1.cl rename test/SemaOpenCL/{invalid-logical-ops-1.2.cl => logical-ops.cl} (59%) 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/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; } From f751db31e6196c0675d629c9cbb8315cf69d4352 Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Tue, 16 May 2017 13:33:48 +0000 Subject: [PATCH 11/13] Merging r302817: ------------------------------------------------------------------------ r302817 | rsmith | 2017-05-11 14:58:24 -0400 (Thu, 11 May 2017) | 9 lines PR22877: When constructing an array via a constructor with a default argument in list-initialization, run cleanups for the default argument after each iteration of the initialization loop. We previously only ran the destructor for any temporary once, at the end of the complete loop, rather than once per iteration! Re-commit of r302750, reverted in r302776. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_40@303167 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGExprAgg.cpp | 20 ++++++++---- test/CodeGenCXX/array-default-argument.cpp | 36 ++++++++++++++++++++++ 2 files changed, 50 insertions(+), 6 deletions(-) create mode 100644 test/CodeGenCXX/array-default-argument.cpp 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/test/CodeGenCXX/array-default-argument.cpp b/test/CodeGenCXX/array-default-argument.cpp new file mode 100644 index 0000000000..8376b4f340 --- /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 -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( +} From 21fe7e8f8ab44b67238af7bf9ba9d8afdf0c0e2c Mon Sep 17 00:00:00 2001 From: Tom Stellard Date: Tue, 16 May 2017 13:33:50 +0000 Subject: [PATCH 12/13] Merging r302818: ------------------------------------------------------------------------ r302818 | rsmith | 2017-05-11 15:17:54 -0400 (Thu, 11 May 2017) | 2 lines Work around different -std= default for PS4 target. ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_40@303168 91177308-0d34-0410-b5e6-96231b3b80d8 --- test/CodeGenCXX/array-default-argument.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/CodeGenCXX/array-default-argument.cpp b/test/CodeGenCXX/array-default-argument.cpp index 8376b4f340..a07e390839 100644 --- a/test/CodeGenCXX/array-default-argument.cpp +++ b/test/CodeGenCXX/array-default-argument.cpp @@ -1,5 +1,5 @@ // RUN: %clang_cc1 -emit-llvm -o - %s -triple %itanium_abi_triple | FileCheck %s -// RUN: %clang_cc1 -emit-llvm -o - %s -triple %itanium_abi_triple -fexceptions -fcxx-exceptions | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-EH +// 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(); From a8a1f8cd8548678cdbc3e6c016292036a1d481df Mon Sep 17 00:00:00 2001 From: Hal Finkel Date: Thu, 25 May 2017 00:33:25 +0000 Subject: [PATCH 13/13] Revert unnecessary changes Revert unnecessary changes relative to upstream Clang to make future merging easier. --- include/clang/Driver/Driver.h | 14 +++++++------- lib/Driver/Driver.cpp | 1 + lib/Driver/ToolChain.cpp | 2 +- 3 files changed, 9 insertions(+), 8 deletions(-) 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/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())