Skip to content

Commit

Permalink
[clang] Require including config.h for CLANG_DEFAULT_STD_C
Browse files Browse the repository at this point in the history
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
  • Loading branch information
porglezomp committed May 14, 2022
1 parent 2e27094 commit ae8bbc4
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 12 deletions.
12 changes: 12 additions & 0 deletions clang/include/clang/Config/config.h.cmake
Expand Up @@ -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}"
Expand Down
21 changes: 9 additions & 12 deletions clang/lib/Basic/LangStandards.cpp
Expand Up @@ -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:
Expand Down

0 comments on commit ae8bbc4

Please sign in to comment.