This breaks building Chromium, https://build.chromium.org/p/chromium.fyi/builders/ClangToTWin64%28dbg%29/builds/7125/steps/compile/logs/stdio
FAILED: obj/components/webcrypto/webcrypto/aes_gcm.obj ../../third_party/llvm-build/Release+Asserts/bin/clang-cl.exe /nologo /showIncludes /FC @obj/components/webcrypto/webcrypto/aes_gcm.obj.rsp /c ../../components/webcrypto/algorithms/aes_gcm.cc /Foobj/components/webcrypto/webcrypto/aes_gcm.obj /Fd"obj/components/webcrypto/webcrypto_cc.pdb" In file included from ../../components/webcrypto/algorithms/aes_gcm.cc:5: In file included from ../../third_party/boringssl/src/include\openssl/evp.h:60: In file included from ../../third_party/boringssl/src/include\openssl/base.h:313: In file included from C:\b\depot_tools\win_toolchain\vs_files\d5dc33b15d1b2c086f2f6632e2fd15882f80dbd3\win_sdk\bin\..\..\VC\include\memory:6: In file included from C:\b\depot_tools\win_toolchain\vs_files\d5dc33b15d1b2c086f2f6632e2fd15882f80dbd3\win_sdk\bin\..\..\VC\include\xmemory:6: In file included from C:\b\depot_tools\win_toolchain\vs_files\d5dc33b15d1b2c086f2f6632e2fd15882f80dbd3\win_sdk\bin\..\..\VC\include\xmemory0:1151: In file included from C:\b\c\b\ClangToTWin64_dbg_\src\third_party\llvm-build\Release+Asserts\bin\..\lib\clang\4.0.0\include\intrin.h:34: In file included from C:\b\c\b\ClangToTWin64_dbg_\src\third_party\llvm-build\Release+Asserts\bin\..\lib\clang\4.0.0\include\x86intrin.h:29: In file included from C:\b\c\b\ClangToTWin64_dbg_\src\third_party\llvm-build\Release+Asserts\bin\..\lib\clang\4.0.0\include\immintrin.h:32: C:\b\c\b\ClangToTWin64_dbg_\src\third_party\llvm-build\Release+Asserts\lib\clang\4.0.0\include\xmmintrin.h(2097,6): error: declaration of '_mm_sfence' has a different language linkage void _mm_sfence(void); ^ C:\b\c\b\ClangToTWin64_dbg_\src\third_party\llvm-build\Release+Asserts\lib\clang\4.0.0\include\xmmintrin.h(2097,6): note: previous implicit declaration is here C:\b\c\b\ClangToTWin64_dbg_\src\third_party\llvm-build\Release+Asserts\lib\clang\4.0.0\include\xmmintrin.h(2407,14): error: declaration of '_mm_getcsr' has a different language linkage unsigned int _mm_getcsr(void); ^ It looks like just including memory like in https://cs.chromium.org/chromium/src/third_party/boringssl/src/include/openssl/base.h?type=cs&q=third_party/boringssl/src/include/openssl/base.h&sq=package:chromium&l=313 is enough to repro, so this looks like it probably breaks all users of clang-cl. Please revert. On Tue, Sep 13, 2016 at 3:26 PM, Albert Gutowski via cfe-commits < cfe-commits@lists.llvm.org> wrote: > Author: agutowski > Date: Tue Sep 13 14:26:42 2016 > New Revision: 281375 > > URL: http://llvm.org/viewvc/llvm-project?rev=281375&view=rev > Log: > Add some MS aliases for existing intrinsics > > Reviewers: thakis, compnerd, majnemer, rsmith, rnk > > Subscribers: cfe-commits > > Differential Revision: https://reviews.llvm.org/D24330 > > Added: > cfe/trunk/test/Sema/implicit-intel-builtin-decl.c > cfe/trunk/test/Sema/implicit-ms-builtin-decl.c > Modified: > cfe/trunk/include/clang/Basic/Builtins.def > cfe/trunk/include/clang/Basic/Builtins.h > cfe/trunk/include/clang/Basic/BuiltinsX86.def > cfe/trunk/lib/Basic/Targets.cpp > cfe/trunk/lib/CodeGen/CGBuiltin.cpp > cfe/trunk/lib/Headers/emmintrin.h > cfe/trunk/lib/Headers/ia32intrin.h > cfe/trunk/lib/Headers/intrin.h > cfe/trunk/lib/Headers/xmmintrin.h > cfe/trunk/lib/Sema/SemaDecl.cpp > cfe/trunk/test/CodeGen/builtins-x86.c > > Modified: cfe/trunk/include/clang/Basic/Builtins.def > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/ > clang/Basic/Builtins.def?rev=281375&r1=281374&r2=281375&view=diff > ============================================================ > ================== > --- cfe/trunk/include/clang/Basic/Builtins.def (original) > +++ cfe/trunk/include/clang/Basic/Builtins.def Tue Sep 13 14:26:42 2016 > @@ -74,6 +74,7 @@ > // f -> this is a libc/libm function without the '__builtin_' prefix. It > can > // be followed by ':headername:' to state which header this function > // comes from. > +// h -> this function requires a specific header or an explicit > declaration. > // i -> this is a runtime library implemented function without the > // '__builtin_' prefix. It will be implemented in compiler-rt or > libgcc. > // p:N: -> this is a printf-like function whose Nth argument is the > format > @@ -708,6 +709,9 @@ BUILTIN(__builtin_rindex, "c*cC*i", "Fn" > // Microsoft builtins. These are only active with -fms-extensions. > LANGBUILTIN(_alloca, "v*z", "n", ALL_MS_LANGUAGES) > LANGBUILTIN(__assume, "vb", "n", ALL_MS_LANGUAGES) > +LIBBUILTIN(_byteswap_ushort, "UsUs", "fnc", "stdlib.h", > ALL_MS_LANGUAGES) > +LIBBUILTIN(_byteswap_ulong, "ULiULi", "fnc", "stdlib.h", > ALL_MS_LANGUAGES) > +LIBBUILTIN(_byteswap_uint64, "ULLiULLi", "fnc", "stdlib.h", > ALL_MS_LANGUAGES) > LANGBUILTIN(__debugbreak, "v", "n", ALL_MS_LANGUAGES) > LANGBUILTIN(__exception_code, "ULi", "n", ALL_MS_LANGUAGES) > LANGBUILTIN(_exception_code, "ULi", "n", ALL_MS_LANGUAGES) > @@ -724,6 +728,9 @@ LANGBUILTIN(_InterlockedExchange, > LANGBUILTIN(_InterlockedExchangePointer, "v*v*D*v*", "n", > ALL_MS_LANGUAGES) > LANGBUILTIN(_InterlockedIncrement, "LiLiD*", "n", > ALL_MS_LANGUAGES) > LANGBUILTIN(__noop, "i.", "n", ALL_MS_LANGUAGES) > +LANGBUILTIN(__popcnt16, "UsUs", "nc", ALL_MS_LANGUAGES) > +LANGBUILTIN(__popcnt, "UiUi", "nc", ALL_MS_LANGUAGES) > +LANGBUILTIN(__popcnt64, "ULLiULLi", "nc", ALL_MS_LANGUAGES) > LANGBUILTIN(__readfsdword, "ULiULi", "n", ALL_MS_LANGUAGES) > LANGBUILTIN(_rotl8, "UcUcUc", "n", ALL_MS_LANGUAGES) > LANGBUILTIN(_rotl16, "UsUsUc", "n", ALL_MS_LANGUAGES) > > Modified: cfe/trunk/include/clang/Basic/Builtins.h > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/ > clang/Basic/Builtins.h?rev=281375&r1=281374&r2=281375&view=diff > ============================================================ > ================== > --- cfe/trunk/include/clang/Basic/Builtins.h (original) > +++ cfe/trunk/include/clang/Basic/Builtins.h Tue Sep 13 14:26:42 2016 > @@ -139,6 +139,13 @@ public: > return strchr(getRecord(ID).Attributes, 'f') != nullptr; > } > > + // \brief Returns true if this builtin requires appropriate header in > other > + // compilers. In Clang it will work even without including it, but we > can emit > + // a warning about missing header. > + bool isHeaderDependentFunction(unsigned ID) const { > + return strchr(getRecord(ID).Attributes, 'h') != nullptr; > + } > + > /// \brief Determines whether this builtin is a predefined > compiler-rt/libgcc > /// function, such as "__clear_cache", where we know the signature a > /// priori. > > Modified: cfe/trunk/include/clang/Basic/BuiltinsX86.def > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/ > clang/Basic/BuiltinsX86.def?rev=281375&r1=281374&r2=281375&view=diff > ============================================================ > ================== > --- cfe/trunk/include/clang/Basic/BuiltinsX86.def (original) > +++ cfe/trunk/include/clang/Basic/BuiltinsX86.def Tue Sep 13 14:26:42 2016 > @@ -23,6 +23,10 @@ > # define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) BUILTIN(ID, TYPE, > ATTRS) > #endif > > +#if defined(BUILTIN) && !defined(TARGET_HEADER_BUILTIN) > +# define TARGET_HEADER_BUILTIN(ID, TYPE, ATTRS, HEADER, LANG, FEATURE) > BUILTIN(ID, TYPE, ATTRS) > +#endif > + > // FIXME: Are these nothrow/const? > > // Miscellaneous builtin for checking x86 cpu features. > @@ -301,7 +305,9 @@ TARGET_BUILTIN(__builtin_ia32_pabsw128, > TARGET_BUILTIN(__builtin_ia32_pabsd128, "V4iV4i", "", "ssse3") > > TARGET_BUILTIN(__builtin_ia32_ldmxcsr, "vUi", "", "sse") > +TARGET_HEADER_BUILTIN(_mm_setcsr, "vUi", "h","xmmintrin.h", > ALL_LANGUAGES, "sse") > TARGET_BUILTIN(__builtin_ia32_stmxcsr, "Ui", "", "sse") > +TARGET_HEADER_BUILTIN(_mm_getcsr, "Ui", "h", "xmmintrin.h", > ALL_LANGUAGES, "sse") > TARGET_BUILTIN(__builtin_ia32_cvtss2si, "iV4f", "", "sse") > TARGET_BUILTIN(__builtin_ia32_cvttss2si, "iV4f", "", "sse") > TARGET_BUILTIN(__builtin_ia32_cvtss2si64, "LLiV4f", "", "sse") > @@ -310,6 +316,7 @@ TARGET_BUILTIN(__builtin_ia32_storehps, > TARGET_BUILTIN(__builtin_ia32_storelps, "vV2i*V4f", "", "sse") > TARGET_BUILTIN(__builtin_ia32_movmskps, "iV4f", "", "sse") > TARGET_BUILTIN(__builtin_ia32_sfence, "v", "", "sse") > +TARGET_HEADER_BUILTIN(_mm_sfence, "v", "h", "xmmintrin.h", > ALL_LANGUAGES, "sse") > TARGET_BUILTIN(__builtin_ia32_rcpps, "V4fV4f", "", "sse") > TARGET_BUILTIN(__builtin_ia32_rcpss, "V4fV4f", "", "sse") > TARGET_BUILTIN(__builtin_ia32_rsqrtps, "V4fV4f", "", "sse") > @@ -337,9 +344,13 @@ TARGET_BUILTIN(__builtin_ia32_cvtsd2ss, > TARGET_BUILTIN(__builtin_ia32_cvtps2dq, "V4iV4f", "", "sse2") > TARGET_BUILTIN(__builtin_ia32_cvttps2dq, "V4iV4f", "", "sse2") > TARGET_BUILTIN(__builtin_ia32_clflush, "vvC*", "", "sse2") > +TARGET_HEADER_BUILTIN(_mm_clflush, "vvC*", "h", "emmintrin.h", > ALL_LANGUAGES, "sse2") > TARGET_BUILTIN(__builtin_ia32_lfence, "v", "", "sse2") > +TARGET_HEADER_BUILTIN(_mm_lfence, "v", "h", "emmintrin.h", > ALL_LANGUAGES, "sse2") > TARGET_BUILTIN(__builtin_ia32_mfence, "v", "", "sse2") > +TARGET_HEADER_BUILTIN(_mm_mfence, "v", "h", "emmintrin.h", > ALL_LANGUAGES, "sse2") > TARGET_BUILTIN(__builtin_ia32_pause, "v", "", "sse2") > +TARGET_HEADER_BUILTIN(_mm_pause, "v", "h", "emmintrin.h", ALL_LANGUAGES, > "sse2") > TARGET_BUILTIN(__builtin_ia32_pmuludq128, "V2LLiV4iV4i", "", "sse2") > TARGET_BUILTIN(__builtin_ia32_psraw128, "V8sV8sV8s", "", "sse2") > TARGET_BUILTIN(__builtin_ia32_psrad128, "V4iV4iV4i", "", "sse2") > @@ -894,6 +905,7 @@ TARGET_BUILTIN(__builtin_ia32_xtest, "i" > > BUILTIN(__builtin_ia32_rdpmc, "ULLii", "") > BUILTIN(__builtin_ia32_rdtsc, "ULLi", "") > +BUILTIN(__rdtsc, "ULLi", "") > BUILTIN(__builtin_ia32_rdtscp, "ULLiUi*", "") > // PKU > TARGET_BUILTIN(__builtin_ia32_rdpkru, "Ui", "", "pku") > @@ -2059,3 +2071,4 @@ TARGET_BUILTIN(__builtin_ia32_mwaitx, "v > > #undef BUILTIN > #undef TARGET_BUILTIN > +#undef TARGET_HEADER_BUILTIN > > Modified: cfe/trunk/lib/Basic/Targets.cpp > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/ > Targets.cpp?rev=281375&r1=281374&r2=281375&view=diff > ============================================================ > ================== > --- cfe/trunk/lib/Basic/Targets.cpp (original) > +++ cfe/trunk/lib/Basic/Targets.cpp Tue Sep 13 14:26:42 2016 > @@ -2303,6 +2303,8 @@ const Builtin::Info BuiltinInfo[] = { > { #ID, TYPE, ATTRS, HEADER, ALL_LANGUAGES, nullptr }, > #define TARGET_BUILTIN(ID, TYPE, ATTRS, FEATURE) > \ > { #ID, TYPE, ATTRS, nullptr, ALL_LANGUAGES, FEATURE }, > +#define TARGET_HEADER_BUILTIN(ID, TYPE, ATTRS, HEADER, LANGS, FEATURE) > \ > + { #ID, TYPE, ATTRS, HEADER, LANGS, FEATURE }, > #include "clang/Basic/BuiltinsX86.def" > }; > > > Modified: cfe/trunk/lib/CodeGen/CGBuiltin.cpp > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ > CGBuiltin.cpp?rev=281375&r1=281374&r2=281375&view=diff > ============================================================ > ================== > --- cfe/trunk/lib/CodeGen/CGBuiltin.cpp (original) > +++ cfe/trunk/lib/CodeGen/CGBuiltin.cpp Tue Sep 13 14:26:42 2016 > @@ -681,6 +681,9 @@ RValue CodeGenFunction::EmitBuiltinExpr( > "cast"); > return RValue::get(Result); > } > + case Builtin::BI__popcnt16: > + case Builtin::BI__popcnt: > + case Builtin::BI__popcnt64: > case Builtin::BI__builtin_popcount: > case Builtin::BI__builtin_popcountl: > case Builtin::BI__builtin_popcountll: { > @@ -6932,6 +6935,25 @@ Value *CodeGenFunction::EmitX86BuiltinEx > Value *F = CGM.getIntrinsic(Intrinsic::prefetch); > return Builder.CreateCall(F, {Address, RW, Locality, Data}); > } > + case X86::BI_mm_clflush: { > + return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_ > sse2_clflush), > + Ops[0]); > + } > + case X86::BI_mm_lfence: { > + return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_ > sse2_lfence)); > + } > + case X86::BI_mm_mfence: { > + return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_ > sse2_mfence)); > + } > + case X86::BI_mm_sfence: { > + return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_ > sse_sfence)); > + } > + case X86::BI_mm_pause: { > + return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_ > sse2_pause)); > + } > + case X86::BI__rdtsc: { > + return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_rdtsc)); > + } > case X86::BI__builtin_ia32_undef128: > case X86::BI__builtin_ia32_undef256: > case X86::BI__builtin_ia32_undef512: > @@ -6944,12 +6966,14 @@ Value *CodeGenFunction::EmitX86BuiltinEx > case X86::BI__builtin_ia32_vec_ext_v2si: > return Builder.CreateExtractElement(Ops[0], > llvm::ConstantInt::get(Ops[1]->getType(), > 0)); > + case X86::BI_mm_setcsr: > case X86::BI__builtin_ia32_ldmxcsr: { > Address Tmp = CreateMemTemp(E->getArg(0)->getType()); > Builder.CreateStore(Ops[0], Tmp); > return Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_ > sse_ldmxcsr), > Builder.CreateBitCast(Tmp.getPointer(), > Int8PtrTy)); > } > + case X86::BI_mm_getcsr: > case X86::BI__builtin_ia32_stmxcsr: { > Address Tmp = CreateMemTemp(E->getType()); > Builder.CreateCall(CGM.getIntrinsic(Intrinsic::x86_sse_stmxcsr), > > Modified: cfe/trunk/lib/Headers/emmintrin.h > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/ > emmintrin.h?rev=281375&r1=281374&r2=281375&view=diff > ============================================================ > ================== > --- cfe/trunk/lib/Headers/emmintrin.h (original) > +++ cfe/trunk/lib/Headers/emmintrin.h Tue Sep 13 14:26:42 2016 > @@ -2457,11 +2457,7 @@ _mm_stream_si64(long long *__p, long lon > /// \param __p > /// A pointer to the memory location used to identify the cache line > to be > /// flushed. > -static __inline__ void __DEFAULT_FN_ATTRS > -_mm_clflush(void const *__p) > -{ > - __builtin_ia32_clflush(__p); > -} > +void _mm_clflush(void const *); > > /// \brief Forces strong memory ordering (serialization) between load > /// instructions preceding this instruction and load instructions > following > @@ -2472,11 +2468,7 @@ _mm_clflush(void const *__p) > /// > /// This intrinsic corresponds to the \c LFENCE instruction. > /// > -static __inline__ void __DEFAULT_FN_ATTRS > -_mm_lfence(void) > -{ > - __builtin_ia32_lfence(); > -} > +void _mm_lfence(void); > > /// \brief Forces strong memory ordering (serialization) between load and > store > /// instructions preceding this instruction and load and store > instructions > @@ -2487,11 +2479,7 @@ _mm_lfence(void) > /// > /// This intrinsic corresponds to the \c MFENCE instruction. > /// > -static __inline__ void __DEFAULT_FN_ATTRS > -_mm_mfence(void) > -{ > - __builtin_ia32_mfence(); > -} > +void _mm_mfence(void); > > /// \brief Converts 16-bit signed integers from both 128-bit integer > vector > /// operands into 8-bit signed integers, and packs the results into the > @@ -3213,11 +3201,7 @@ _mm_castsi128_pd(__m128i __a) > /// > /// This intrinsic corresponds to the \c PAUSE instruction. > /// > -static __inline__ void __DEFAULT_FN_ATTRS > -_mm_pause(void) > -{ > - __builtin_ia32_pause(); > -} > +void _mm_pause(void); > > #undef __DEFAULT_FN_ATTRS > > > Modified: cfe/trunk/lib/Headers/ia32intrin.h > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/ > ia32intrin.h?rev=281375&r1=281374&r2=281375&view=diff > ============================================================ > ================== > --- cfe/trunk/lib/Headers/ia32intrin.h (original) > +++ cfe/trunk/lib/Headers/ia32intrin.h Tue Sep 13 14:26:42 2016 > @@ -60,12 +60,6 @@ __rdpmc(int __A) { > return __builtin_ia32_rdpmc(__A); > } > > -/* __rdtsc */ > -static __inline__ unsigned long long __attribute__((__always_inline__, > __nodebug__)) > -__rdtsc(void) { > - return __builtin_ia32_rdtsc(); > -} > - > /* __rdtscp */ > static __inline__ unsigned long long __attribute__((__always_inline__, > __nodebug__)) > __rdtscp(unsigned int *__A) { > > Modified: cfe/trunk/lib/Headers/intrin.h > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/ > intrin.h?rev=281375&r1=281374&r2=281375&view=diff > ============================================================ > ================== > --- cfe/trunk/lib/Headers/intrin.h (original) > +++ cfe/trunk/lib/Headers/intrin.h Tue Sep 13 14:26:42 2016 > @@ -463,14 +463,6 @@ _BitScanReverse(unsigned long *_Index, u > *_Index = 31 - __builtin_clzl(_Mask); > return 1; > } > -static __inline__ unsigned short __DEFAULT_FN_ATTRS > -__popcnt16(unsigned short _Value) { > - return __builtin_popcount((int)_Value); > -} > -static __inline__ unsigned int __DEFAULT_FN_ATTRS > -__popcnt(unsigned int _Value) { > - return __builtin_popcount(_Value); > -} > static __inline__ unsigned char __DEFAULT_FN_ATTRS > _bittest(long const *_BitBase, long _BitPos) { > return (*_BitBase >> _BitPos) & 1; > @@ -513,11 +505,6 @@ _BitScanReverse64(unsigned long *_Index, > *_Index = 63 - __builtin_clzll(_Mask); > return 1; > } > -static __inline__ > -unsigned __int64 __DEFAULT_FN_ATTRS > -__popcnt64(unsigned __int64 _Value) { > - return __builtin_popcountll(_Value); > -} > static __inline__ unsigned char __DEFAULT_FN_ATTRS > _bittest64(__int64 const *_BitBase, __int64 _BitPos) { > return (*_BitBase >> _BitPos) & 1; > > Modified: cfe/trunk/lib/Headers/xmmintrin.h > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Headers/ > xmmintrin.h?rev=281375&r1=281374&r2=281375&view=diff > ============================================================ > ================== > --- cfe/trunk/lib/Headers/xmmintrin.h (original) > +++ cfe/trunk/lib/Headers/xmmintrin.h Tue Sep 13 14:26:42 2016 > @@ -2094,11 +2094,7 @@ _mm_stream_ps(float *__p, __m128 __a) > /// > /// This intrinsic corresponds to the \c SFENCE instruction. > /// > -static __inline__ void __DEFAULT_FN_ATTRS > -_mm_sfence(void) > -{ > - __builtin_ia32_sfence(); > -} > +void _mm_sfence(void); > > /// \brief Extracts 16-bit element from a 64-bit vector of [4 x i16] and > /// returns it, as specified by the immediate integer operand. > @@ -2408,11 +2404,7 @@ _mm_sad_pu8(__m64 __a, __m64 __b) > /// > /// \returns A 32-bit unsigned integer containing the contents of the > MXCSR > /// register. > -static __inline__ unsigned int __DEFAULT_FN_ATTRS > -_mm_getcsr(void) > -{ > - return __builtin_ia32_stmxcsr(); > -} > +unsigned int _mm_getcsr(void); > > /// \brief Sets the MXCSR register with the 32-bit unsigned integer > value. There > /// are several groups of macros associated with this intrinsic, > including: > @@ -2450,11 +2442,7 @@ _mm_getcsr(void) > /// > /// \param __i > /// A 32-bit unsigned integer value to be written to the MXCSR > register. > -static __inline__ void __DEFAULT_FN_ATTRS > -_mm_setcsr(unsigned int __i) > -{ > - __builtin_ia32_ldmxcsr(__i); > -} > +void _mm_setcsr(unsigned int); > > /// \brief Selects 4 float values from the 128-bit operands of [4 x > float], as > /// specified by the immediate value operand. > > Modified: cfe/trunk/lib/Sema/SemaDecl.cpp > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/ > SemaDecl.cpp?rev=281375&r1=281374&r2=281375&view=diff > ============================================================ > ================== > --- cfe/trunk/lib/Sema/SemaDecl.cpp (original) > +++ cfe/trunk/lib/Sema/SemaDecl.cpp Tue Sep 13 14:26:42 2016 > @@ -1791,7 +1791,9 @@ NamedDecl *Sema::LazilyCreateBuiltin(Ide > return nullptr; > } > > - if (!ForRedeclaration && Context.BuiltinInfo.isPredefinedLibFunction(ID)) > { > + if (!ForRedeclaration && > + (Context.BuiltinInfo.isPredefinedLibFunction(ID) || > + Context.BuiltinInfo.isHeaderDependentFunction(ID))) { > Diag(Loc, diag::ext_implicit_lib_function_decl) > << Context.BuiltinInfo.getName(ID) << R; > if (Context.BuiltinInfo.getHeaderName(ID) && > > Modified: cfe/trunk/test/CodeGen/builtins-x86.c > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ > CodeGen/builtins-x86.c?rev=281375&r1=281374&r2=281375&view=diff > ============================================================ > ================== > --- cfe/trunk/test/CodeGen/builtins-x86.c (original) > +++ cfe/trunk/test/CodeGen/builtins-x86.c Tue Sep 13 14:26:42 2016 > @@ -262,7 +262,9 @@ void f0() { > tmp_i = __builtin_ia32_vec_ext_v2si(tmp_V2i, 0); > > (void) __builtin_ia32_ldmxcsr(tmp_Ui); > + (void) _mm_setcsr(tmp_Ui); > tmp_Ui = __builtin_ia32_stmxcsr(); > + tmp_Ui = _mm_getcsr(); > (void)__builtin_ia32_fxsave(tmp_vp); > (void)__builtin_ia32_fxsave64(tmp_vp); > (void)__builtin_ia32_fxrstor(tmp_vp); > @@ -290,6 +292,7 @@ void f0() { > tmp_i = __builtin_ia32_cvttss2si(tmp_V4f); > > tmp_i = __builtin_ia32_rdtsc(); > + tmp_i = __rdtsc(); > tmp_i = __builtin_ia32_rdtscp(&tmp_Ui); > tmp_LLi = __builtin_ia32_rdpmc(tmp_i); > #ifdef USE_64 > @@ -304,6 +307,7 @@ void f0() { > tmp_i = __builtin_ia32_pmovmskb(tmp_V8c); > (void) __builtin_ia32_movntq(tmp_V1LLip, tmp_V1LLi); > (void) __builtin_ia32_sfence(); > + (void) _mm_sfence(); > > tmp_V4s = __builtin_ia32_psadbw(tmp_V8c, tmp_V8c); > tmp_V4f = __builtin_ia32_rcpps(tmp_V4f); > @@ -339,8 +343,13 @@ void f0() { > tmp_V4i = __builtin_ia32_cvtps2dq(tmp_V4f); > tmp_V4i = __builtin_ia32_cvttps2dq(tmp_V4f); > (void) __builtin_ia32_clflush(tmp_vCp); > + (void) _mm_clflush(tmp_vCp); > (void) __builtin_ia32_lfence(); > + (void) _mm_lfence(); > (void) __builtin_ia32_mfence(); > + (void) _mm_mfence(); > + (void) __builtin_ia32_pause(); > + (void) _mm_pause(); > tmp_V4s = __builtin_ia32_psllwi(tmp_V4s, tmp_i); > tmp_V2i = __builtin_ia32_pslldi(tmp_V2i, tmp_i); > tmp_V1LLi = __builtin_ia32_psllqi(tmp_V1LLi, tmp_i); > > Added: cfe/trunk/test/Sema/implicit-intel-builtin-decl.c > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/ > implicit-intel-builtin-decl.c?rev=281375&view=auto > ============================================================ > ================== > --- cfe/trunk/test/Sema/implicit-intel-builtin-decl.c (added) > +++ cfe/trunk/test/Sema/implicit-intel-builtin-decl.c Tue Sep 13 14:26:42 > 2016 > @@ -0,0 +1,40 @@ > +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -target-feature +sse2 > -fsyntax-only -verify %s > +// RUN: %clang_cc1 -triple x86_64-unknown-unknown -target-feature +sse2 > -fsyntax-only -verify %s -x c++ > + > +void f() { > + (void)_mm_getcsr(); // expected-warning{{implicitly declaring library > function '_mm_getcsr'}} \ > + // expected-note{{include the header <xmmintrin.h> or explicitly > provide a declaration for '_mm_getcsr'}} > + _mm_setcsr(1); // expected-warning{{implicitly declaring library > function '_mm_setcsr'}} \ > + // expected-note{{include the header <xmmintrin.h> or explicitly > provide a declaration for '_mm_setcsr'}} > + _mm_sfence(); // expected-warning{{implicitly declaring library > function '_mm_sfence'}} \ > + // expected-note{{include the header <xmmintrin.h> or explicitly > provide a declaration for '_mm_sfence'}} > + > + _mm_clflush((void*)0); // expected-warning{{implicitly declaring > library function '_mm_clflush'}} \ > + // expected-note{{include the header <emmintrin.h> or explicitly > provide a declaration for '_mm_clflush'}} > + _mm_lfence(); // expected-warning{{implicitly declaring library > function '_mm_lfence'}} \ > + // expected-note{{include the header <emmintrin.h> or explicitly > provide a declaration for '_mm_lfence'}} > + _mm_mfence(); // expected-warning{{implicitly declaring library > function '_mm_mfence'}} \ > + // expected-note{{include the header <emmintrin.h> or explicitly > provide a declaration for '_mm_mfence'}} > + _mm_pause(); // expected-warning{{implicitly declaring library function > '_mm_pause'}} \ > + // expected-note{{include the header <emmintrin.h> or explicitly > provide a declaration for '_mm_pause'}} > +} > + > +unsigned int _mm_getcsr(); > +void _mm_setcsr(unsigned int); > +void _mm_sfence(); > + > +void _mm_clflush(void const *); > +void _mm_lfence(); > +void _mm_mfence(); > +void _mm_pause(); > + > +void g() { > + (void)_mm_getcsr(); > + _mm_setcsr(1); > + _mm_sfence(); > + > + _mm_clflush((void*)0); > + _mm_lfence(); > + _mm_mfence(); > + _mm_pause(); > +} > > Added: cfe/trunk/test/Sema/implicit-ms-builtin-decl.c > URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/ > implicit-ms-builtin-decl.c?rev=281375&view=auto > ============================================================ > ================== > --- cfe/trunk/test/Sema/implicit-ms-builtin-decl.c (added) > +++ cfe/trunk/test/Sema/implicit-ms-builtin-decl.c Tue Sep 13 14:26:42 > 2016 > @@ -0,0 +1,19 @@ > +// RUN: %clang_cc1 -fsyntax-only -verify %s -fms-extensions > + > +void f() { > + (void)_byteswap_ushort(42); // expected-warning{{implicitly declaring > library function '_byteswap_ushort}} \ > + // expected-note{{include the header <stdlib.h> or explicitly provide a > declaration for '_byteswap_ushort'}} > + (void)_byteswap_uint64(42LL); // expected-warning{{implicitly declaring > library function '_byteswap_uint64}} \ > + // expected-note{{include the header <stdlib.h> or explicitly provide a > declaration for '_byteswap_uint64'}} > +} > + > +void _byteswap_ulong(); // expected-warning{{incompatible redeclaration > of library function '_byteswap_ulong'}} \ > +// expected-note{{'_byteswap_ulong' is a builtin}} > + > +unsigned short _byteswap_ushort(unsigned short); > +unsigned long long _byteswap_uint64(unsigned long long); > + > +void g() { > + (void)_byteswap_ushort(42); > + (void)_byteswap_uint64(42LL); > +} > > > _______________________________________________ > 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