r265895 - [Clang][AVX512][BuiltIn] Adding avx512 ( store ) builtin to clang
Author: mzuckerm Date: Sun Apr 10 05:51:04 2016 New Revision: 265895 URL: http://llvm.org/viewvc/llvm-project?rev=265895&view=rev Log: [Clang][AVX512][BuiltIn] Adding avx512 ( store ) builtin to clang Differential Revision: http://reviews.llvm.org/D18925 Modified: cfe/trunk/include/clang/Basic/BuiltinsX86.def cfe/trunk/lib/Headers/avx512bwintrin.h cfe/trunk/lib/Headers/avx512vlbwintrin.h cfe/trunk/lib/Headers/avx512vlintrin.h cfe/trunk/test/CodeGen/avx512bw-builtins.c cfe/trunk/test/CodeGen/avx512vl-builtins.c cfe/trunk/test/CodeGen/avx512vlbw-builtins.c Modified: cfe/trunk/include/clang/Basic/BuiltinsX86.def URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/BuiltinsX86.def?rev=265895&r1=265894&r2=265895&view=diff == --- cfe/trunk/include/clang/Basic/BuiltinsX86.def (original) +++ cfe/trunk/include/clang/Basic/BuiltinsX86.def Sun Apr 10 05:51:04 2016 @@ -1794,6 +1794,24 @@ TARGET_BUILTIN(__builtin_ia32_loadupd128 TARGET_BUILTIN(__builtin_ia32_loadupd256_mask, "V4dV4d*V4dUc","","avx512vl") TARGET_BUILTIN(__builtin_ia32_loadups128_mask, "V4fV4f*V4fUc","","avx512vl") TARGET_BUILTIN(__builtin_ia32_loadups256_mask, "V8fV8f*V8fUc","","avx512vl") +TARGET_BUILTIN(__builtin_ia32_storedquhi512_mask, "vV32s*V32sUi","","avx512bw") +TARGET_BUILTIN(__builtin_ia32_storedquqi512_mask, "vV64c*V64cULLi","","avx512bw") +TARGET_BUILTIN(__builtin_ia32_storedquhi128_mask, "vV8s*V8sUc","","avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_storedquhi256_mask, "vV16s*V16sUs","","avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_storedquqi128_mask, "vV16c*V16cUs","","avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_storedquqi256_mask, "vV32c*V32cUi","","avx512vl,avx512bw") +TARGET_BUILTIN(__builtin_ia32_storeapd128_mask, "vV2d*V2dUc","","avx512vl") +TARGET_BUILTIN(__builtin_ia32_storeapd256_mask, "vV4d*V4dUc","","avx512vl") +TARGET_BUILTIN(__builtin_ia32_storeaps128_mask, "vV4f*V4fUc","","avx512vl") +TARGET_BUILTIN(__builtin_ia32_storeaps256_mask, "vV8f*V8fUc","","avx512vl") +TARGET_BUILTIN(__builtin_ia32_storedqudi128_mask, "vV2LLi*V2LLiUc","","avx512vl") +TARGET_BUILTIN(__builtin_ia32_storedqudi256_mask, "vV4LLi*V4LLiUc","","avx512vl") +TARGET_BUILTIN(__builtin_ia32_storedqusi128_mask, "vV4i*V4iUc","","avx512vl") +TARGET_BUILTIN(__builtin_ia32_storedqusi256_mask, "vV8i*V8iUc","","avx512vl") +TARGET_BUILTIN(__builtin_ia32_storeupd128_mask, "vV2d*V2dUc","","avx512vl") +TARGET_BUILTIN(__builtin_ia32_storeupd256_mask, "vV4d*V4dUc","","avx512vl") +TARGET_BUILTIN(__builtin_ia32_storeups128_mask, "vV4f*V4fUc","","avx512vl") +TARGET_BUILTIN(__builtin_ia32_storeups256_mask, "vV8f*V8fUc","","avx512vl") #undef BUILTIN #undef TARGET_BUILTIN Modified: cfe/trunk/lib/Headers/avx512bwintrin.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/avx512bwintrin.h?rev=265895&r1=265894&r2=265895&view=diff == --- cfe/trunk/lib/Headers/avx512bwintrin.h (original) +++ cfe/trunk/lib/Headers/avx512bwintrin.h Sun Apr 10 05:51:04 2016 @@ -1981,6 +1981,22 @@ _mm512_maskz_loadu_epi8 (__mmask64 __U, _mm512_setzero_hi (), (__mmask64) __U); } +static __inline__ void __DEFAULT_FN_ATTRS +_mm512_mask_storeu_epi16 (void *__P, __mmask32 __U, __m512i __A) +{ + __builtin_ia32_storedquhi512_mask ((__v32hi *) __P, + (__v32hi) __A, + (__mmask32) __U); +} + +static __inline__ void __DEFAULT_FN_ATTRS +_mm512_mask_storeu_epi8 (void *__P, __mmask64 __U, __m512i __A) +{ + __builtin_ia32_storedquqi512_mask ((__v64qi *) __P, + (__v64qi) __A, + (__mmask64) __U); +} + #undef __DEFAULT_FN_ATTRS #endif Modified: cfe/trunk/lib/Headers/avx512vlbwintrin.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/avx512vlbwintrin.h?rev=265895&r1=265894&r2=265895&view=diff == --- cfe/trunk/lib/Headers/avx512vlbwintrin.h (original) +++ cfe/trunk/lib/Headers/avx512vlbwintrin.h Sun Apr 10 05:51:04 2016 @@ -3020,6 +3020,38 @@ _mm256_maskz_loadu_epi8 (__mmask32 __U, _mm256_setzero_si256 (), (__mmask32) __U); } +static __inline__ void __DEFAULT_FN_ATTRS +_mm_mask_storeu_epi16 (void *__P, __mmask8 __U, __m128i __A) +{ + __builtin_ia32_storedquhi128_mask ((__v8hi *) __P, + (__v8hi) __A, + (__mmask8) __U); +} + +static __inline__ void __DEFAULT_FN_ATTRS +_mm256_mask_storeu_epi16 (void *__P, __mmask16 __U, __m256i __A) +{ + __builtin_ia32_storedquhi256_mask ((__v16hi *) __P, + (__v16hi) __A, + (__mmask16) __U); +} + +static __inline__ void __DEFAULT_FN_ATTRS +_mm_mask_storeu_epi8 (void *__P, __mmask16 __U, __m128i __A) +{ + __builtin_ia32_storedquqi128_mask ((__v16qi *) __P, + (__v16qi) __A, +
r265896 - Adding avx512 (unpck{h|l}{pd|ps}, rcp14{pd|ps}{128|256}, vplzcnt{d|q} ) builtin to clang
Author: mzuckerm Date: Sun Apr 10 07:54:23 2016 New Revision: 265896 URL: http://llvm.org/viewvc/llvm-project?rev=265896&view=rev Log: Adding avx512 (unpck{h|l}{pd|ps}, rcp14{pd|ps}{128|256},vplzcnt{d|q} ) builtin to clang Differential Revision: http://reviews.llvm.org/D18931 Modified: cfe/trunk/include/clang/Basic/BuiltinsX86.def cfe/trunk/lib/Headers/avx512fintrin.h cfe/trunk/lib/Headers/avx512vlintrin.h cfe/trunk/test/CodeGen/avx512f-builtins.c cfe/trunk/test/CodeGen/avx512vl-builtins.c Modified: cfe/trunk/include/clang/Basic/BuiltinsX86.def URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/BuiltinsX86.def?rev=265896&r1=265895&r2=265896&view=diff == --- cfe/trunk/include/clang/Basic/BuiltinsX86.def (original) +++ cfe/trunk/include/clang/Basic/BuiltinsX86.def Sun Apr 10 07:54:23 2016 @@ -1812,6 +1812,26 @@ TARGET_BUILTIN(__builtin_ia32_storeupd12 TARGET_BUILTIN(__builtin_ia32_storeupd256_mask, "vV4d*V4dUc","","avx512vl") TARGET_BUILTIN(__builtin_ia32_storeups128_mask, "vV4f*V4fUc","","avx512vl") TARGET_BUILTIN(__builtin_ia32_storeups256_mask, "vV8f*V8fUc","","avx512vl") +TARGET_BUILTIN(__builtin_ia32_unpckhpd512_mask, "V8dV8dV8dV8dUc","","avx512f") +TARGET_BUILTIN(__builtin_ia32_unpckhps512_mask, "V16fV16fV16fV16fUs","","avx512f") +TARGET_BUILTIN(__builtin_ia32_unpcklpd512_mask, "V8dV8dV8dV8dUc","","avx512f") +TARGET_BUILTIN(__builtin_ia32_unpcklps512_mask, "V16fV16fV16fV16fUs","","avx512f") +TARGET_BUILTIN(__builtin_ia32_unpckhpd128_mask, "V2dV2dV2dV2dUc","","avx512vl") +TARGET_BUILTIN(__builtin_ia32_unpckhpd256_mask, "V4dV4dV4dV4dUc","","avx512vl") +TARGET_BUILTIN(__builtin_ia32_unpckhps128_mask, "V4fV4fV4fV4fUc","","avx512vl") +TARGET_BUILTIN(__builtin_ia32_unpckhps256_mask, "V8fV8fV8fV8fUc","","avx512vl") +TARGET_BUILTIN(__builtin_ia32_unpcklpd128_mask, "V2dV2dV2dV2dUc","","avx512vl") +TARGET_BUILTIN(__builtin_ia32_unpcklpd256_mask, "V4dV4dV4dV4dUc","","avx512vl") +TARGET_BUILTIN(__builtin_ia32_unpcklps128_mask, "V4fV4fV4fV4fUc","","avx512vl") +TARGET_BUILTIN(__builtin_ia32_unpcklps256_mask, "V8fV8fV8fV8fUc","","avx512vl") +TARGET_BUILTIN(__builtin_ia32_rcp14pd128_mask, "V2dV2dV2dUc","","avx512vl") +TARGET_BUILTIN(__builtin_ia32_rcp14pd256_mask, "V4dV4dV4dUc","","avx512vl") +TARGET_BUILTIN(__builtin_ia32_rcp14ps128_mask, "V4fV4fV4fUc","","avx512vl") +TARGET_BUILTIN(__builtin_ia32_rcp14ps256_mask, "V8fV8fV8fUc","","avx512vl") +TARGET_BUILTIN(__builtin_ia32_vplzcntd_128_mask, "V4iV4iV4iUc","","avx512vl") +TARGET_BUILTIN(__builtin_ia32_vplzcntd_256_mask, "V8iV8iV8iUc","","avx512vl") +TARGET_BUILTIN(__builtin_ia32_vplzcntq_128_mask, "V2LLiV2LLiV2LLiUc","","avx512vl") +TARGET_BUILTIN(__builtin_ia32_vplzcntq_256_mask, "V4LLiV4LLiV4LLiUc","","avx512vl") #undef BUILTIN #undef TARGET_BUILTIN Modified: cfe/trunk/lib/Headers/avx512fintrin.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/avx512fintrin.h?rev=265896&r1=265895&r2=265896&view=diff == --- cfe/trunk/lib/Headers/avx512fintrin.h (original) +++ cfe/trunk/lib/Headers/avx512fintrin.h Sun Apr 10 07:54:23 2016 @@ -3974,6 +3974,81 @@ __builtin_ia32_vcomisd ((__v2df) (__A), __builtin_ia32_vcomiss ((__v4sf) (__A), (__v4sf) (__B), ( __P), ( __R));\ }) +static __inline__ __m512d __DEFAULT_FN_ATTRS +_mm512_mask_unpackhi_pd (__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) +{ + return (__m512d) __builtin_ia32_unpckhpd512_mask ((__v8df) __A, +(__v8df) __B, +(__v8df) __W, +(__mmask8) __U); +} + +static __inline__ __m512d __DEFAULT_FN_ATTRS +_mm512_maskz_unpackhi_pd (__mmask8 __U, __m512d __A, __m512d __B) +{ + return (__m512d) __builtin_ia32_unpckhpd512_mask ((__v8df) __A, +(__v8df) __B, +(__v8df) +_mm512_setzero_pd (), +(__mmask8) __U); +} + +static __inline__ __m512 __DEFAULT_FN_ATTRS +_mm512_mask_unpackhi_ps (__m512 __W, __mmask16 __U, __m512 __A, __m512 __B) +{ + return (__m512) __builtin_ia32_unpckhps512_mask ((__v16sf) __A, + (__v16sf) __B, + (__v16sf) __W, + (__mmask16) __U); +} + +static __inline__ __m512 __DEFAULT_FN_ATTRS +_mm512_maskz_unpackhi_ps (__mmask16 __U, __m512 __A, __m512 __B) +{ + return (__m512) __builtin_ia32_unpckhps512_mask ((__v16sf) __A, + (__v16sf) __B, + (__v16sf) + _mm512_setzero_ps (), + (__mmask16) __U); +} + +static __inline__ __m512d __DEFAULT_FN_ATTRS +_mm512_mask_unpacklo_pd (__m512d __W, __mmask8 __U, __m512d __A, __m512d __B) +{ + return (__m512d) __builtin_ia32_unpcklpd512_mask ((__v8df) __A, +(__v8df) __B, +(__v8df) __W, +(__mmask8) __U); +} + +static __inline__ __m512d __DEFAULT_FN_ATTRS +_mm512_maskz_unpacklo_pd (__mmask8 __U, __m512d
r265899 - Correct pg instrumentation for AArch64
Author: compnerd Date: Sun Apr 10 09:29:55 2016 New Revision: 265899 URL: http://llvm.org/viewvc/llvm-project?rev=265899&view=rev Log: Correct pg instrumentation for AArch64 It seems that there was a miscommunication between Renato and I, and the original behaviour of AArch64 was to be preserved and not to mirror the new behaviour. Restore the original behaviour for AArch64. Addresses post-commit review comments from Renato Golin. Modified: cfe/trunk/lib/Basic/Targets.cpp cfe/trunk/test/Frontend/gnu-mcount.c Modified: cfe/trunk/lib/Basic/Targets.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Targets.cpp?rev=265899&r1=265898&r2=265899&view=diff == --- cfe/trunk/lib/Basic/Targets.cpp (original) +++ cfe/trunk/lib/Basic/Targets.cpp Sun Apr 10 09:29:55 2016 @@ -5464,11 +5464,6 @@ public: // AArch64 targets default to using the ARM C++ ABI. TheCXXABI.set(TargetCXXABI::GenericAArch64); - -if (Triple.getOS() == llvm::Triple::Linux || -Triple.getOS() == llvm::Triple::UnknownOS) - this->MCountName = - Opts.EABIVersion == "gnu" ? "\01__gnu_mcount_nc" : "\01mcount"; } StringRef getABI() const override { return ABI; } Modified: cfe/trunk/test/Frontend/gnu-mcount.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Frontend/gnu-mcount.c?rev=265899&r1=265898&r2=265899&view=diff == --- cfe/trunk/test/Frontend/gnu-mcount.c (original) +++ cfe/trunk/test/Frontend/gnu-mcount.c Sun Apr 10 09:29:55 2016 @@ -1,43 +1,43 @@ // RUN: %clang -target armv7-unknown-none-eabi -pg -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK -check-prefix CHECK-ARM-EABI // RUN: %clang -target armv7-unknown-none-eabi -pg -meabi gnu -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK -check-prefix CHECK-ARM-EABI-MEABI-GNU -// RUN: %clang -target aarch64-unknown-none-eabi -pg -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK -check-prefix CHECK-ARM-EABI -// RUN: %clang -target aarch64-unknown-none-eabi -pg -meabi gnu -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK -check-prefix CHECK-ARM-EABI-MEABI-GNU +// RUN: %clang -target aarch64-unknown-none-eabi -pg -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK -check-prefix CHECK-ARM64-EABI +// RUN: %clang -target aarch64-unknown-none-eabi -pg -meabi gnu -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK -check-prefix CHECK-ARM64-EABI // RUN: %clang -target armv7-unknown-linux-gnueabi -pg -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK -check-prefix CHECK-ARM-EABI // RUN: %clang -target armv7-unknown-linux-gnueabi -meabi gnu -pg -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK -check-prefix CHECK-ARM-EABI-MEABI-GNU -// RUN: %clang -target aarch64-unknown-linux-gnueabi -pg -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK -check-prefix CHECK-ARM-EABI -// RUN: %clang -target aarch64-unknown-linux-gnueabi -meabi gnu -pg -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK -check-prefix CHECK-ARM-EABI-MEABI-GNU +// RUN: %clang -target aarch64-unknown-linux-gnueabi -pg -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK -check-prefix CHECK-ARM64-EABI +// RUN: %clang -target aarch64-unknown-linux-gnueabi -meabi gnu -pg -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK -check-prefix CHECK-ARM64-EABI // RUN: %clang -target armv7-unknown-linux-gnueabihf -pg -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK -check-prefix CHECK-ARM-EABI // RUN: %clang -target armv7-unknown-linux-gnueabihf -meabi gnu -pg -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK -check-prefix CHECK-ARM-EABI-MEABI-GNU -// RUN: %clang -target aarch64-unknown-linux-gnueabihf -pg -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK -check-prefix CHECK-ARM-EABI -// RUN: %clang -target aarch64-unknown-linux-gnueabihf -meabi gnu -pg -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK -check-prefix CHECK-ARM-EABI-MEABI-GNU +// RUN: %clang -target aarch64-unknown-linux-gnueabihf -pg -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK -check-prefix CHECK-ARM64-EABI +// RUN: %clang -target aarch64-unknown-linux-gnueabihf -meabi gnu -pg -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK -check-prefix CHECK-ARM64-EABI // RUN: %clang -target armv7-unknown-freebsd-gnueabihf -pg -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK -check-prefix CHECK-ARM-EABI-FREEBSD // RUN: %clang -target armv7-unknown-freebsd-gnueabihf -meabi gnu -pg -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK -check-prefix CHECK-ARM-EABI-FREEBSD // RUN: %clang -target aarch64-unknown-freebsd-gnueabihf -pg -S -emit-llvm -o - %s | FileCheck %s -check-prefix CHECK -check-prefix CHECK-ARM64-EABI-FREEBSD // RUN: %clang -target aarch64-unknown-freebsd-gnueabihf -meabi gnu -pg -S -emit-llvm -o -
Re: [PATCH] RHEL: Look in more places to find g++ headers and runtime
LGTM with a comment saying why it is needed. Cheers, Rafael On 22 March 2016 at 23:02, Michael Lampe via cfe-commits wrote: > Some distros with ten years of support ship an old gcc but later offer more > recent versions for installation in parallel. These versions are typically > not only needed for the compilation of llvm/clang, but also to properly use > the clang binary that comes out. > > Clang already searches /usr at runtime for the most recent installation of > gcc. This patch appends paths for add-on installations of gcc in RHEL. > > > ___ > cfe-commits mailing list > cfe-commits@lists.llvm.org > http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits > ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
r265904 - [Clang][AVX512][BuiltIn] Adding avx512 ( vcvt ) builtin to clang
Author: mzuckerm Date: Sun Apr 10 12:24:03 2016 New Revision: 265904 URL: http://llvm.org/viewvc/llvm-project?rev=265904&view=rev Log: [Clang][AVX512][BuiltIn] Adding avx512 ( vcvt ) builtin to clang Differential Revision: http://reviews.llvm.org/D18932 Modified: cfe/trunk/include/clang/Basic/BuiltinsX86.def cfe/trunk/lib/Headers/avx512fintrin.h cfe/trunk/test/CodeGen/avx512f-builtins.c Modified: cfe/trunk/include/clang/Basic/BuiltinsX86.def URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/BuiltinsX86.def?rev=265904&r1=265903&r2=265904&view=diff == --- cfe/trunk/include/clang/Basic/BuiltinsX86.def (original) +++ cfe/trunk/include/clang/Basic/BuiltinsX86.def Sun Apr 10 12:24:03 2016 @@ -1832,6 +1832,22 @@ TARGET_BUILTIN(__builtin_ia32_vplzcntd_1 TARGET_BUILTIN(__builtin_ia32_vplzcntd_256_mask, "V8iV8iV8iUc","","avx512vl") TARGET_BUILTIN(__builtin_ia32_vplzcntq_128_mask, "V2LLiV2LLiV2LLiUc","","avx512vl") TARGET_BUILTIN(__builtin_ia32_vplzcntq_256_mask, "V4LLiV4LLiV4LLiUc","","avx512vl") +TARGET_BUILTIN(__builtin_ia32_vcvtsd2si64, "LLiV2dIi","","avx512f") +TARGET_BUILTIN(__builtin_ia32_vcvtsd2si32, "iV2dIi","","avx512f") +TARGET_BUILTIN(__builtin_ia32_vcvtsd2usi32, "UiV2dIi","","avx512f") +TARGET_BUILTIN(__builtin_ia32_vcvtsd2usi64, "ULLiV2dIi","","avx512f") +TARGET_BUILTIN(__builtin_ia32_vcvtss2si32, "iV4fIi","","avx512f") +TARGET_BUILTIN(__builtin_ia32_vcvtss2si64, "LLiV4fIi","","avx512f") +TARGET_BUILTIN(__builtin_ia32_vcvtss2usi32, "UiV4fIi","","avx512f") +TARGET_BUILTIN(__builtin_ia32_vcvtss2usi64, "ULLiV4fIi","","avx512f") +TARGET_BUILTIN(__builtin_ia32_vcvttsd2si32, "iV2dIi","","avx512f") +TARGET_BUILTIN(__builtin_ia32_vcvttsd2si64, "LLiV2dIi","","avx512f") +TARGET_BUILTIN(__builtin_ia32_vcvttsd2usi32, "UiV2dIi","","avx512f") +TARGET_BUILTIN(__builtin_ia32_vcvttsd2usi64, "ULLiV2dIi","","avx512f") +TARGET_BUILTIN(__builtin_ia32_vcvttss2si32, "iV4fIi","","avx512f") +TARGET_BUILTIN(__builtin_ia32_vcvttss2si64, "LLiV4fIi","","avx512f") +TARGET_BUILTIN(__builtin_ia32_vcvttss2usi32, "UiV4fIi","","avx512f") +TARGET_BUILTIN(__builtin_ia32_vcvttss2usi64, "ULLiV4fIi","","avx512f") #undef BUILTIN #undef TARGET_BUILTIN Modified: cfe/trunk/lib/Headers/avx512fintrin.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/avx512fintrin.h?rev=265904&r1=265903&r2=265904&view=diff == --- cfe/trunk/lib/Headers/avx512fintrin.h (original) +++ cfe/trunk/lib/Headers/avx512fintrin.h Sun Apr 10 12:24:03 2016 @@ -3982,6 +3982,9 @@ _mm512_mask_unpackhi_pd (__m512d __W, __ (__v8df) __W, (__mmask8) __U); } +#define _mm_cvt_roundsd_si64( __A, __R) __extension__ ({ \ +__builtin_ia32_vcvtsd2si64 ((__v2df)( __A),( __R));\ +}) static __inline__ __m512d __DEFAULT_FN_ATTRS _mm512_maskz_unpackhi_pd (__mmask8 __U, __m512d __A, __m512d __B) @@ -4050,6 +4053,186 @@ _mm512_maskz_unpacklo_ps (__mmask16 __U, (__mmask16) __U); } +#define _mm_cvt_roundsd_i64( __A, __R) __extension__ ({ \ +__builtin_ia32_vcvtsd2si64 ((__v2df)( __A),( __R));\ +}) + +#define _mm_cvt_roundsd_si32( __A, __R) __extension__ ({ \ +__builtin_ia32_vcvtsd2si32 ((__v2df)( __A),( __R));\ +}) + +#define _mm_cvt_roundsd_i32( __A, __R) __extension__ ({ \ +__builtin_ia32_vcvtsd2si32 ((__v2df)( __A),( __R));\ +}) + +#define _mm_cvt_roundsd_u32( __A, __R) __extension__ ({ \ +__builtin_ia32_vcvtsd2usi32 ((__v2df)( __A),( __R));\ +}) + +static __inline__ unsigned __DEFAULT_FN_ATTRS +_mm_cvtsd_u32 (__m128d __A) +{ + return (unsigned) __builtin_ia32_vcvtsd2usi32 ((__v2df) __A, + _MM_FROUND_CUR_DIRECTION); +} + +#define _mm_cvt_roundsd_u64( __A, __R) __extension__ ({ \ +__builtin_ia32_vcvtsd2usi64 ((__v2df)( __A),( __R));\ +}) + +static __inline__ unsigned long long __DEFAULT_FN_ATTRS +_mm_cvtsd_u64 (__m128d __A) +{ + return (unsigned long long) __builtin_ia32_vcvtsd2usi64 ((__v2df) + __A, + _MM_FROUND_CUR_DIRECTION); +} + +#define _mm_cvt_roundss_si32( __A, __R) __extension__ ({ \ +__builtin_ia32_vcvtss2si32 ((__v4sf)( __A),( __R));\ +}) + +#define _mm_cvt_roundss_i32( __A, __R) __extension__ ({ \ +__builtin_ia32_vcvtss2si32 ((__v4sf)( __A),( __R));\ +}) + +#define _mm_cvt_roundss_si64( __A, __R) __extension__ ({ \ +__builtin_ia32_vcvtss2si64 ((__v4sf)( __A),( __R));\ +}) + +#define _mm_cvt_roundss_i64( __A, __R) __extension__ ({ \ +__builtin_ia32_vcvtss2si64 ((__v4sf)( __A),( __R));\ +}) + +#define _mm_cvt_roundss_u32( __A, __R) __extension__ ({ \ +__builtin_ia32_vcvtss2usi32 ((__v4sf)( __A),( __R));\ +}) + +static __inline__ unsigned __DEFAULT_FN_ATTRS +_mm_cvtss_u32 (__m128 __A) +{ + return (unsigned) __builtin_ia32_vcvtss2usi32 ((__v4sf) __A, + _MM_FROUND_CUR_DIRECTION); +} + +#define _mm_cvt_roundss_u64( __A, __R) __extension__ ({ \ +__builtin_ia32_vcvtss2us
Re: [PATCH] D15469: Expose cxx constructor and method properties through libclang and python bindings.
jbcoe added a comment. I plan to strip out the `isDeleted` methods as the associated tests now fail (which I need to raise a bug for) and need reworking to apply to non-member functions. I'll submit a new patch for `isDeleted` on its own. The rest of this patch seems uncontentious. I hope to find time this week to make the changes. http://reviews.llvm.org/D15469 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D18551: Added Fixer implementation and fix() interface in clang-format for removing redundant code.
ioeric updated this revision to Diff 53185. ioeric marked 10 inline comments as done. ioeric added a comment. - Moved constructor initializer fixer to a separate patch; pull runFixer and runFormat into separate classes, and merge common code in CodeProcessor class. http://reviews.llvm.org/D18551 Files: include/clang/Format/Format.h lib/Format/Format.cpp lib/Format/FormatToken.h lib/Format/TokenAnnotator.h unittests/Format/CMakeLists.txt unittests/Format/FixTest.cpp unittests/Format/FormatTest.cpp Index: unittests/Format/FormatTest.cpp === --- unittests/Format/FormatTest.cpp +++ unittests/Format/FormatTest.cpp @@ -11274,6 +11274,35 @@ Code, formatReplacements(Code, Replaces, Style))); } +TEST_F(ReplacementTest, FixOnlyAffectedCodeAfterReplacements) { + std::string Code = "namespace A {\n" + "namespace B {\n" + " int x;\n" + "} // namespace B\n" + "} // namespace A\n" + "\n" + "namespace C {\n" + "namespace D { int i; }\n" + "inline namespace E { namespace { int y; } }\n" + "int x= 0;" + "}"; + std::string Expected = "\n\nnamespace C {\n" + "namespace D { int i; }\n\n" + "int x= 0;" + "}"; + FileID ID = Context.createInMemoryFile("fix.cpp", Code); + tooling::Replacements Replaces; + Replaces.insert(tooling::Replacement( + Context.Sources, Context.getLocation(ID, 3, 3), 6, "")); + Replaces.insert(tooling::Replacement( + Context.Sources, Context.getLocation(ID, 9, 34), 6, "")); + + format::FormatStyle Style = format::getLLVMStyle(); + auto FinalReplaces = formatReplacements( + Code, cleanupAroundReplacements(Code, Replaces, Style), Style); + EXPECT_EQ(Expected, applyAllReplacements(Code, FinalReplaces)); +} + } // end namespace } // end namespace format } // end namespace clang Index: unittests/Format/FixTest.cpp === --- /dev/null +++ unittests/Format/FixTest.cpp @@ -0,0 +1,85 @@ +//===- unittest/Format/FixTest.cpp - Code fixing unit tests ---===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===--===// + +#include "clang/Format/Format.h" + +#include "clang/Tooling/Core/Replacement.h" + +#include "gtest/gtest.h" + +namespace clang { +namespace format { +namespace { + +class FixTest : public ::testing::Test { +protected: + std::string fix(llvm::StringRef Code, + const std::vector &Ranges, + const FormatStyle &Style = getLLVMStyle()) { +tooling::Replacements Replaces = format::fix(Style, Code, Ranges); + +std::string Result = applyAllReplacements(Code, Replaces); +EXPECT_NE("", Result); +return Result; + } +}; + +TEST_F(FixTest, DeleteEmptyNamespaces) { + std::string Code = "namespace A {\n" + "namespace B {\n" + "} // namespace B\n" + "} // namespace A\n\n" + "namespace C {\n" + "namespace D { int i; }\n" + "inline namespace E { namespace { } }\n" + "}"; + std::string Expected = "\n\nnamespace C {\n" + "namespace D { int i; }\n\n" + "}"; + std::vector Ranges; + Ranges.push_back(tooling::Range(28, 0)); + Ranges.push_back(tooling::Range(91, 6)); + Ranges.push_back(tooling::Range(132, 0)); + std::string Result = fix(Code, Ranges); + EXPECT_EQ(Expected, Result); +} + +TEST_F(FixTest, NamespaceWithSyntaxError) { + std::string Code = "namespace A {\n" + "namespace B {\n" // missing r_brace + "} // namespace A\n\n" + "namespace C {\n" + "namespace D int i; }\n" + "inline namespace E { namespace { } }\n" + "}"; + std::string Expected = "namespace A {\n" + "\n\nnamespace C {\n" + "namespace D int i; }\n\n" + "}"; + std::vector Ranges(1, tooling::Range(0, Code.size())); + std::string Result = fix(Code, Ranges); + EXPECT_EQ(Expected, Result); +} + +TEST_F(FixTest, EmptyNamespaceNotAffected) { + std::string Code = "namespace A {\n\n" + "namespace {\n\n}}"; + // Even though the namespaces are empty, but the inner most empty namespace + // block is not affected by the changed ranges. + std::string Expected = "namespace A {\n\n" + "namespace {\n\n
[libcxx] r265914 - Implement LWG#680, which was missed lo these many moons ago, and was reported as bug #27259. As a drive-by fix, replace the hand-rolled equivalent to addressof in __wrap_iter with t
Author: marshall Date: Sun Apr 10 22:54:53 2016 New Revision: 265914 URL: http://llvm.org/viewvc/llvm-project?rev=265914&view=rev Log: Implement LWG#680, which was missed lo these many moons ago, and was reported as bug #27259. As a drive-by fix, replace the hand-rolled equivalent to addressof in __wrap_iter with the real thing. Modified: libcxx/trunk/include/iterator libcxx/trunk/test/std/iterators/predef.iterators/move.iterators/move.iterator/types.pass.cpp Modified: libcxx/trunk/include/iterator URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/include/iterator?rev=265914&r1=265913&r2=265914&view=diff == --- libcxx/trunk/include/iterator (original) +++ libcxx/trunk/include/iterator Sun Apr 10 22:54:53 2016 @@ -949,7 +949,7 @@ public: typedef typename iterator_traits::iterator_category iterator_category; typedef typename iterator_traits::value_type value_type; typedef typename iterator_traits::difference_type difference_type; -typedef typename iterator_traits::pointer pointer; +typedef iterator_type pointer; #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES typedef value_type&& reference; #else @@ -964,10 +964,7 @@ public: _LIBCPP_INLINE_VISIBILITY reference operator*() const { return static_cast(*__i); } -_LIBCPP_INLINE_VISIBILITY pointer operator->() const { - typename iterator_traits::reference __ref = *__i; - return &__ref; -} +_LIBCPP_INLINE_VISIBILITY pointer operator->() const { return __i;} _LIBCPP_INLINE_VISIBILITY move_iterator& operator++() {++__i; return *this;} _LIBCPP_INLINE_VISIBILITY move_iterator operator++(int) {move_iterator __tmp(*this); ++__i; return __tmp;} @@ -1185,7 +1182,7 @@ public: _LIBCPP_ASSERT(__get_const_db()->__dereferenceable(this), "Attempted to dereference a non-dereferenceable iterator"); #endif -return (pointer)&reinterpret_cast(*__i); +return (pointer)_VSTD::addressof(*__i); } _LIBCPP_INLINE_VISIBILITY __wrap_iter& operator++() _NOEXCEPT { Modified: libcxx/trunk/test/std/iterators/predef.iterators/move.iterators/move.iterator/types.pass.cpp URL: http://llvm.org/viewvc/llvm-project/libcxx/trunk/test/std/iterators/predef.iterators/move.iterators/move.iterator/types.pass.cpp?rev=265914&r1=265913&r2=265914&view=diff == --- libcxx/trunk/test/std/iterators/predef.iterators/move.iterators/move.iterator/types.pass.cpp (original) +++ libcxx/trunk/test/std/iterators/predef.iterators/move.iterators/move.iterator/types.pass.cpp Sun Apr 10 22:54:53 2016 @@ -18,7 +18,7 @@ // public: // typedef Iter iterator_type; // typedef Iter::difference_type difference_type; -// typedef Iterator pointer; +// typedef Iter pointer; // typedef Iter::value_type value_type; // typedef value_type&& reference; // }; @@ -36,7 +36,7 @@ test() typedef std::iterator_traits T; static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); -static_assert((std::is_same::value), ""); +static_assert((std::is_same::value), ""); static_assert((std::is_same::value), ""); #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES static_assert((std::is_same::value), ""); ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D10833: Retrieve BinaryOperator::getOpcode and BinaryOperator::getOpcodeStr via libclang and its python interface
RedX2501 added a comment. Ping http://reviews.llvm.org/D10833 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D10834: Added functions to retrieve information about whether a vardecl is local in libclang and its python bindings.
RedX2501 added a comment. Ping http://reviews.llvm.org/D10834 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D18943: clang-format: [JS] do not insert semicolons after wrapped annotations.
djasper added inline comments. Comment at: lib/Format/UnwrappedLineParser.cpp:708 @@ +707,3 @@ + if (Line && Line->Tokens.size() > 1) { +// If the token before the previous one is an '@', the previous token is an +// annotation and can precede another identifier/value. How about: * Moving this down a bit * Checking this only if PreviousMustBeValue * return directly Like this, it is a bit hard to understand all the combinations of what's going on. http://reviews.llvm.org/D18943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D18943: clang-format: [JS] do not insert semicolons after wrapped annotations.
mprobst updated this revision to Diff 53190. mprobst added a comment. - simplify conditions http://reviews.llvm.org/D18943 Files: lib/Format/UnwrappedLineParser.cpp unittests/Format/FormatTestJS.cpp Index: unittests/Format/FormatTestJS.cpp === --- unittests/Format/FormatTestJS.cpp +++ unittests/Format/FormatTestJS.cpp @@ -686,6 +686,8 @@ verifyFormat("x instanceof String", "x\n" "instanceof\n" "String"); + verifyFormat("function f(@Foo bar) {}", "function f(@Foo\n" + " bar) {}"); } TEST_F(FormatTestJS, ClosureStyleCasts) { Index: lib/Format/UnwrappedLineParser.cpp === --- lib/Format/UnwrappedLineParser.cpp +++ lib/Format/UnwrappedLineParser.cpp @@ -715,6 +715,13 @@ return; bool PreviousMustBeValue = mustBeJSIdentOrValue(Keywords, Previous); + if (PreviousMustBeValue && Line && Line->Tokens.size() > 1) { +// If the token before the previous one is an '@', the previous token is an +// annotation and can precede another identifier/value. +const FormatToken *PrePrevious = std::next(Line->Tokens.rend(), 2)->Tok; +if (PrePrevious->is(tok::at)) + return; + } if (Next->is(tok::exclaim) && PreviousMustBeValue) addUnwrappedLine(); bool NextMustBeValue = mustBeJSIdentOrValue(Keywords, Next); Index: unittests/Format/FormatTestJS.cpp === --- unittests/Format/FormatTestJS.cpp +++ unittests/Format/FormatTestJS.cpp @@ -686,6 +686,8 @@ verifyFormat("x instanceof String", "x\n" "instanceof\n" "String"); + verifyFormat("function f(@Foo bar) {}", "function f(@Foo\n" + " bar) {}"); } TEST_F(FormatTestJS, ClosureStyleCasts) { Index: lib/Format/UnwrappedLineParser.cpp === --- lib/Format/UnwrappedLineParser.cpp +++ lib/Format/UnwrappedLineParser.cpp @@ -715,6 +715,13 @@ return; bool PreviousMustBeValue = mustBeJSIdentOrValue(Keywords, Previous); + if (PreviousMustBeValue && Line && Line->Tokens.size() > 1) { +// If the token before the previous one is an '@', the previous token is an +// annotation and can precede another identifier/value. +const FormatToken *PrePrevious = std::next(Line->Tokens.rend(), 2)->Tok; +if (PrePrevious->is(tok::at)) + return; + } if (Next->is(tok::exclaim) && PreviousMustBeValue) addUnwrappedLine(); bool NextMustBeValue = mustBeJSIdentOrValue(Keywords, Next); ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D18943: clang-format: [JS] do not insert semicolons after wrapped annotations.
mprobst marked an inline comment as done. Comment at: lib/Format/UnwrappedLineParser.cpp:708 @@ +707,3 @@ + if (Line && Line->Tokens.size() > 1) { +// If the token before the previous one is an '@', the previous token is an +// annotation and can precede another identifier/value. djasper wrote: > How about: > * Moving this down a bit > * Checking this only if PreviousMustBeValue > * return directly > > Like this, it is a bit hard to understand all the combinations of what's > going on. Good point. I was under the impression initially that I had to check the token before getting the next here. http://reviews.llvm.org/D18943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D18947: Emit the module hash by default with -flto=thin.
joker.eph created this revision. joker.eph added a reviewer: tejohnson. joker.eph added a subscriber: cfe-commits. Herald added a subscriber: joker.eph. http://reviews.llvm.org/D18947 Files: lib/CodeGen/BackendUtil.cpp Index: lib/CodeGen/BackendUtil.cpp === --- lib/CodeGen/BackendUtil.cpp +++ lib/CodeGen/BackendUtil.cpp @@ -668,7 +668,8 @@ case Backend_EmitBC: getPerModulePasses()->add(createBitcodeWriterPass( -*OS, CodeGenOpts.EmitLLVMUseLists, CodeGenOpts.EmitSummaryIndex)); +*OS, CodeGenOpts.EmitLLVMUseLists, CodeGenOpts.EmitSummaryIndex, +CodeGenOpts.EmitSummaryIndex)); break; case Backend_EmitLL: Index: lib/CodeGen/BackendUtil.cpp === --- lib/CodeGen/BackendUtil.cpp +++ lib/CodeGen/BackendUtil.cpp @@ -668,7 +668,8 @@ case Backend_EmitBC: getPerModulePasses()->add(createBitcodeWriterPass( -*OS, CodeGenOpts.EmitLLVMUseLists, CodeGenOpts.EmitSummaryIndex)); +*OS, CodeGenOpts.EmitLLVMUseLists, CodeGenOpts.EmitSummaryIndex, +CodeGenOpts.EmitSummaryIndex)); break; case Backend_EmitLL: ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D18943: clang-format: [JS] do not insert semicolons after wrapped annotations.
djasper accepted this revision. djasper added a comment. This revision is now accepted and ready to land. Looks good. Comment at: unittests/Format/FormatTestJS.cpp:689 @@ -688,1 +688,3 @@ "String"); + verifyFormat("function f(@Foo bar) {}", "function f(@Foo\n" + " bar) {}"); Are there any other valid use cases of "@" in JS? If so, should we add a test for at least one of those? http://reviews.llvm.org/D18943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D18943: clang-format: [JS] do not insert semicolons after wrapped annotations.
mprobst marked 2 inline comments as done. Comment at: unittests/Format/FormatTestJS.cpp:689 @@ -688,1 +688,3 @@ "String"); + verifyFormat("function f(@Foo bar) {}", "function f(@Foo\n" + " bar) {}"); djasper wrote: > Are there any other valid use cases of "@" in JS? If so, should we add a test > for at least one of those? @ can only be used for annotations. Those can appear on classes, fields, methods, and parameters. I'll send another review to add tests for those, they are currently formatted properly (inheriting the Java support for them). http://reviews.llvm.org/D18943 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
Re: [PATCH] D18073: Add memory allocating functions
ariccio updated this revision to Diff 53193. ariccio added a comment. I'm not actually sure why I didn't want to split these off into a separate file, but now I finally have. Is this what you were looking for? http://reviews.llvm.org/D18073 Files: llvm/tools/clang/lib/StaticAnalyzer/Checkers/MallocChecker.cpp llvm/tools/clang/test/Analysis/malloc-uses.c llvm/tools/clang/test/Analysis/malloc.c Index: llvm/tools/clang/test/Analysis/malloc-uses.c === --- llvm/tools/clang/test/Analysis/malloc-uses.c +++ llvm/tools/clang/test/Analysis/malloc-uses.c @@ -0,0 +1,96 @@ +// RUN: %clang_cc1 -analyze -analyzer-checker=core,alpha.deadcode.UnreachableCode,alpha.core.CastSize,unix.Malloc,debug.ExprInspection -analyzer-store=region -verify %s + +#include "Inputs/system-header-simulator.h" + +// Without -fms-compatibility, wchar_t isn't a builtin type. MSVC defines +// _WCHAR_T_DEFINED if wchar_t is available. Microsoft recommends that you use +// the builtin type: "Using the typedef version can cause portability +// problems", but we're ok here because we're not actually running anything. +// Also of note is this cryptic warning: "The wchar_t type is not supported +// when you compile C code". +// +// See the docs for more: +// https://msdn.microsoft.com/en-us/library/dh8che7s.aspx +#if !defined(_WCHAR_T_DEFINED) +// "Microsoft implements wchar_t as a two-byte unsigned value" +typedef unsigned short wchar_t; +#define _WCHAR_T_DEFINED +#endif // !defined(_WCHAR_T_DEFINED) + +void free(void *); + +char *tempnam(const char *dir, const char *pfx); +char *_tempnam(const char *dir, const char *prefix); +wchar_t *_wtempnam(const wchar_t *dir, const wchar_t *prefix); + +char *_tempnam_dbg(const char *dir, const char *prefix, int blockType, + const char *filename, int linenumber); + +wchar_t *_wtempnam_dbg(const wchar_t *dir, const wchar_t *prefix, + int blockType, const char *filename, int linenumber); + +void testTempnamLeak(const char* dir, const char* prefix) { + char* fileName = tempnam(dir, prefix); +}// expected-warning {{Potential leak of memory pointed to by}} + +void testWinTempnamLeak(const char* dir, const char* prefix) { + char* fileName = _tempnam(dir, prefix); +}// expected-warning {{Potential leak of memory pointed to by}} + +void testWinTempnamDbgLeak(const char* dir, const char* prefix) { + char* fileName = _tempnam_dbg(dir, prefix, 0, __FILE__, __LINE__); +}// expected-warning {{Potential leak of memory pointed to by}} + +void testWinWideTempnamLeak(const wchar_t* dir, const wchar_t* prefix) { + wchar_t* fileName = _wtempnam(dir, prefix); +}// expected-warning {{Potential leak of memory pointed to by}} + +void testWinWideTempnaDbgmLeak(const wchar_t* dir, const wchar_t* prefix) { + wchar_t* fileName = _wtempnam_dbg(dir, prefix, 0, __FILE__, __LINE__); +}// expected-warning {{Potential leak of memory pointed to by}} + +void testTempnamNoLeak(const char* dir, const char* prefix) { + char* fileName = tempnam(dir, prefix); + free(fileName);// no warning +} + +void testWinTempnamNoLeak(const char* dir, const char* prefix) { + char* fileName = _tempnam(dir, prefix); + free(fileName);// no warning +} + +void testWinTempnamDbgNoLeak(const char* dir, const char* prefix) { + char* fileName = _tempnam_dbg(dir, prefix, 0, __FILE__, __LINE__); + free(fileName);// no warning +} + +void testWinWideTempnamNoLeak(const wchar_t* dir, const wchar_t* prefix) { + wchar_t* fileName = _wtempnam(dir, prefix); + free(fileName);// no warning +} + +void testWinWideTempnamDbgNoLeak(const wchar_t* dir, const wchar_t* prefix) { + wchar_t* fileName = _wtempnam_dbg(dir, prefix, 0, __FILE__, __LINE__); + free(fileName);// no warning +} + +// What does "ContentIsDefined" refer to? +void testTempnamNoLeakContentIsDefined(const char* dir, const char* prefix) { + char* fileName = tempnam(dir, prefix); + char result = fileName[0];// no warning + free(fileName); +} + +// What does "ContentIsDefined" refer to? +void testWinTempnamNoLeakContentIsDefined(const char* dir, const char* prefix) { + char* fileName = _tempnam(dir, prefix); + char result = fileName[0];// no warning + free(fileName); +} + +// What does "ContentIsDefined" refer to? +void testWinWideTempnamNoLeakContentIsDefined(const wchar_t* dir, const wchar_t* prefix) { + wchar_t* fileName = _wtempnam(dir, prefix); + wchar_t result = fileName[0];// no warning + free(fileName); +} Index: llvm/tools/clang/test/Analysis/malloc.c === --- llvm/tools/clang/test/Analysis/malloc.c +++ llvm/tools/clang/test/Analysis/malloc.c @@ -32,11 +32,38 @@ char *strndup(const char *s, size_t n); int memcmp(const void *s1, const void *s2, size_t n); + // Windows variants char *_strdup(const char *strSource); wchar_t *_wcsdup(const wchar_t *strSource); +unsigned char *_mbsdup(const unsigned char *strSource);