Author: rnk Date: Wed Nov 13 16:47:22 2013 New Revision: 194615 URL: http://llvm.org/viewvc/llvm-project?rev=194615&view=rev Log: Only provide MS builtins when -fms-extensions is on
We already have builtins that are only available in GNU mode, so this mirrors that. Reviewers: rsmith Differential Revision: http://llvm-reviews.chandlerc.com/D2128 Modified: cfe/trunk/include/clang/Basic/Builtins.def cfe/trunk/include/clang/Basic/Builtins.h cfe/trunk/lib/Basic/Builtins.cpp cfe/trunk/test/CodeGen/builtin-ms-noop.cpp cfe/trunk/test/Sema/builtins.c cfe/trunk/test/SemaCXX/builtins.cpp Modified: cfe/trunk/include/clang/Basic/Builtins.def URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Builtins.def?rev=194615&r1=194614&r2=194615&view=diff ============================================================================== --- cfe/trunk/include/clang/Basic/Builtins.def (original) +++ cfe/trunk/include/clang/Basic/Builtins.def Wed Nov 13 16:47:22 2013 @@ -92,6 +92,10 @@ # define LIBBUILTIN(ID, TYPE, ATTRS, HEADER, BUILTIN_LANG) BUILTIN(ID, TYPE, ATTRS) #endif +#if defined(BUILTIN) && !defined(LANGBUILTIN) +# define LANGBUILTIN(ID, TYPE, ATTRS, BUILTIN_LANG) BUILTIN(ID, TYPE, ATTRS) +#endif + // Standard libc/libm functions: BUILTIN(__builtin_atan2 , "ddd" , "Fnc") BUILTIN(__builtin_atan2f, "fff" , "Fnc") @@ -670,11 +674,10 @@ BUILTIN(__builtin_abort, "v", "Fnr") BUILTIN(__builtin_index, "c*cC*i", "Fn") BUILTIN(__builtin_rindex, "c*cC*i", "Fn") -// Microsoft builtins. -BUILTIN(__assume, "vb", "n") -BUILTIN(__noop, "v.", "n") -BUILTIN(__debugbreak, "v", "n") - +// Microsoft builtins. These are only active with -fms-extensions. +LANGBUILTIN(__assume, "vb", "n", ALL_MS_LANGUAGES) +LANGBUILTIN(__noop, "v.", "n", ALL_MS_LANGUAGES) +LANGBUILTIN(__debugbreak, "v", "n", ALL_MS_LANGUAGES) // C99 library functions // C99 stdlib.h @@ -1178,3 +1181,4 @@ BUILTIN(__builtin_addressof, "v*v&", "nc #undef BUILTIN #undef LIBBUILTIN +#undef LANGBUILTIN Modified: cfe/trunk/include/clang/Basic/Builtins.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Builtins.h?rev=194615&r1=194614&r2=194615&view=diff ============================================================================== --- cfe/trunk/include/clang/Basic/Builtins.h (original) +++ cfe/trunk/include/clang/Basic/Builtins.h Wed Nov 13 16:47:22 2013 @@ -35,8 +35,10 @@ namespace clang { C_LANG = 0x2, // builtin for c only. CXX_LANG = 0x4, // builtin for cplusplus only. OBJC_LANG = 0x8, // builtin for objective-c and objective-c++ + MS_LANG = 0x10, // builtin requires MS mode. ALL_LANGUAGES = C_LANG | CXX_LANG | OBJC_LANG, // builtin for all languages. - ALL_GNU_LANGUAGES = ALL_LANGUAGES | GNU_LANG // builtin requires GNU mode. + ALL_GNU_LANGUAGES = ALL_LANGUAGES | GNU_LANG, // builtin requires GNU mode. + ALL_MS_LANGUAGES = ALL_LANGUAGES | MS_LANG // builtin requires MS mode. }; namespace Builtin { Modified: cfe/trunk/lib/Basic/Builtins.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Basic/Builtins.cpp?rev=194615&r1=194614&r2=194615&view=diff ============================================================================== --- cfe/trunk/lib/Basic/Builtins.cpp (original) +++ cfe/trunk/lib/Basic/Builtins.cpp Wed Nov 13 16:47:22 2013 @@ -22,6 +22,7 @@ using namespace clang; static const Builtin::Info BuiltinInfo[] = { { "not a builtin function", 0, 0, 0, ALL_LANGUAGES }, #define BUILTIN(ID, TYPE, ATTRS) { #ID, TYPE, ATTRS, 0, ALL_LANGUAGES }, +#define LANGBUILTIN(ID, TYPE, ATTRS, BUILTIN_LANG) { #ID, TYPE, ATTRS, 0, BUILTIN_LANG }, #define LIBBUILTIN(ID, TYPE, ATTRS, HEADER, BUILTIN_LANG) { #ID, TYPE, ATTRS, HEADER,\ BUILTIN_LANG }, #include "clang/Basic/Builtins.def" @@ -54,10 +55,12 @@ bool Builtin::Context::BuiltinIsSupporte llvm::StringRef(BuiltinInfo.HeaderName).equals("math.h"); bool GnuModeUnsupported = !LangOpts.GNUMode && (BuiltinInfo.builtin_lang & GNU_LANG); + bool MSModeUnsupported = !LangOpts.MicrosoftExt && + (BuiltinInfo.builtin_lang & MS_LANG); bool ObjCUnsupported = !LangOpts.ObjC1 && BuiltinInfo.builtin_lang == OBJC_LANG; return !BuiltinsUnsupported && !MathBuiltinsUnsupported && - !GnuModeUnsupported && !ObjCUnsupported; + !GnuModeUnsupported && !MSModeUnsupported && !ObjCUnsupported; } /// InitializeBuiltins - Mark the identifiers for all the builtins with their Modified: cfe/trunk/test/CodeGen/builtin-ms-noop.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/builtin-ms-noop.cpp?rev=194615&r1=194614&r2=194615&view=diff ============================================================================== --- cfe/trunk/test/CodeGen/builtin-ms-noop.cpp (original) +++ cfe/trunk/test/CodeGen/builtin-ms-noop.cpp Wed Nov 13 16:47:22 2013 @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -triple i686-pc-win32 -emit-llvm %s -o - | FileCheck %s +// RUN: %clang_cc1 -fms-extensions -triple i686-pc-win32 -emit-llvm %s -o - | FileCheck %s class A { public: Modified: cfe/trunk/test/Sema/builtins.c URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/builtins.c?rev=194615&r1=194614&r2=194615&view=diff ============================================================================== --- cfe/trunk/test/Sema/builtins.c (original) +++ cfe/trunk/test/Sema/builtins.c Wed Nov 13 16:47:22 2013 @@ -191,3 +191,9 @@ void test18() { ptr = __builtin___strlcpy_chk(dst, src, sizeof(src), sizeof(dst)); // expected-warning {{incompatible integer to pointer conversion}} ptr = __builtin___strlcat_chk(dst, src, sizeof(src), sizeof(dst)); // expected-warning {{incompatible integer to pointer conversion}} } + +void no_ms_builtins() { + __assume(1); // expected-warning {{implicit declaration}} + __noop(1); // expected-warning {{implicit declaration}} + __debugbreak(); // expected-warning {{implicit declaration}} +} Modified: cfe/trunk/test/SemaCXX/builtins.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/builtins.cpp?rev=194615&r1=194614&r2=194615&view=diff ============================================================================== --- cfe/trunk/test/SemaCXX/builtins.cpp (original) +++ cfe/trunk/test/SemaCXX/builtins.cpp Wed Nov 13 16:47:22 2013 @@ -38,3 +38,9 @@ namespace addressof { S *ptmp = __builtin_addressof(S{}); // expected-error {{taking the address of a temporary}} } + +void no_ms_builtins() { + __assume(1); // expected-error {{use of undeclared}} + __noop(1); // expected-error {{use of undeclared}} + __debugbreak(); // expected-error {{use of undeclared}} +} _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
