[clang] Require including config.h for CLANG_DEFAULT_STD_C
This makes CLANG_DEFAULT_STD_C(XX) always be defined, defaulting to lang_unspecified, so you are forced to check its value instead of using an #ifdef. This should help avoid accidentally omitting the include in places where that's important, so that the default language version bug isn't re-introduced. Reviewed By: hokein, dexonsmith Differential Revision: https://reviews.llvm.org/D124974
This commit is contained in:
@@ -16,9 +16,21 @@
|
||||
|
||||
/* Default C/ObjC standard to use. */
|
||||
#cmakedefine CLANG_DEFAULT_STD_C LangStandard::lang_${CLANG_DEFAULT_STD_C}
|
||||
/* Always #define something so that missing the config.h #include at use sites
|
||||
* becomes a compile error.
|
||||
*/
|
||||
#ifndef CLANG_DEFAULT_STD_C
|
||||
#define CLANG_DEFAULT_STD_C LangStandard::lang_unspecified
|
||||
#endif
|
||||
|
||||
/* Default C++/ObjC++ standard to use. */
|
||||
#cmakedefine CLANG_DEFAULT_STD_CXX LangStandard::lang_${CLANG_DEFAULT_STD_CXX}
|
||||
/* Always #define something so that missing the config.h #include at use sites
|
||||
* becomes a compile error.
|
||||
*/
|
||||
#ifndef CLANG_DEFAULT_STD_CXX
|
||||
#define CLANG_DEFAULT_STD_CXX LangStandard::lang_unspecified
|
||||
#endif
|
||||
|
||||
/* Default C++ stdlib to use. */
|
||||
#define CLANG_DEFAULT_CXX_STDLIB "${CLANG_DEFAULT_CXX_STDLIB}"
|
||||
|
||||
@@ -58,30 +58,27 @@ LangStandard::Kind clang::getDefaultLanguageStandard(clang::Language Lang,
|
||||
return LangStandard::lang_cuda;
|
||||
case Language::Asm:
|
||||
case Language::C:
|
||||
#if defined(CLANG_DEFAULT_STD_C)
|
||||
return CLANG_DEFAULT_STD_C;
|
||||
#else
|
||||
if (CLANG_DEFAULT_STD_C != LangStandard::lang_unspecified)
|
||||
return CLANG_DEFAULT_STD_C;
|
||||
|
||||
// The PS4 uses C99 as the default C standard.
|
||||
if (T.isPS4())
|
||||
return LangStandard::lang_gnu99;
|
||||
return LangStandard::lang_gnu17;
|
||||
#endif
|
||||
case Language::ObjC:
|
||||
#if defined(CLANG_DEFAULT_STD_C)
|
||||
return CLANG_DEFAULT_STD_C;
|
||||
#else
|
||||
if (CLANG_DEFAULT_STD_C != LangStandard::lang_unspecified)
|
||||
return CLANG_DEFAULT_STD_C;
|
||||
|
||||
return LangStandard::lang_gnu11;
|
||||
#endif
|
||||
case Language::CXX:
|
||||
case Language::ObjCXX:
|
||||
#if defined(CLANG_DEFAULT_STD_CXX)
|
||||
return CLANG_DEFAULT_STD_CXX;
|
||||
#else
|
||||
if (CLANG_DEFAULT_STD_CXX != LangStandard::lang_unspecified)
|
||||
return CLANG_DEFAULT_STD_CXX;
|
||||
|
||||
if (T.isDriverKit())
|
||||
return LangStandard::lang_gnucxx17;
|
||||
else
|
||||
return LangStandard::lang_gnucxx14;
|
||||
#endif
|
||||
case Language::RenderScript:
|
||||
return LangStandard::lang_c99;
|
||||
case Language::HIP:
|
||||
|
||||
Reference in New Issue
Block a user