Author: Cassie Jones Date: 2022-05-14T01:48:14-07:00 New Revision: ae8bbc43f4709b910cd6c1e1ddc5bc854785a142
URL: https://github.com/llvm/llvm-project/commit/ae8bbc43f4709b910cd6c1e1ddc5bc854785a142 DIFF: https://github.com/llvm/llvm-project/commit/ae8bbc43f4709b910cd6c1e1ddc5bc854785a142.diff LOG: [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 Added: Modified: clang/include/clang/Config/config.h.cmake clang/lib/Basic/LangStandards.cpp Removed: ################################################################################ diff --git a/clang/include/clang/Config/config.h.cmake b/clang/include/clang/Config/config.h.cmake index 680cc7310f76d..dfd2f757a185b 100644 --- a/clang/include/clang/Config/config.h.cmake +++ b/clang/include/clang/Config/config.h.cmake @@ -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}" diff --git a/clang/lib/Basic/LangStandards.cpp b/clang/lib/Basic/LangStandards.cpp index 6643af38ba01c..a21898dd3c627 100644 --- a/clang/lib/Basic/LangStandards.cpp +++ b/clang/lib/Basic/LangStandards.cpp @@ -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: _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits