[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:
Cassie Jones
2022-05-14 01:47:41 -07:00
parent 2e27094796
commit ae8bbc43f4
2 changed files with 21 additions and 12 deletions

View File

@@ -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}"

View File

@@ -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: