diff --git a/clang/include/clang/Config/config.h.cmake b/clang/include/clang/Config/config.h.cmake --- a/clang/include/clang/Config/config.h.cmake +++ b/clang/include/clang/Config/config.h.cmake @@ -16,9 +16,19 @@ /* 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 --- a/clang/lib/Basic/LangStandards.cpp +++ b/clang/lib/Basic/LangStandards.cpp @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// #include "clang/Basic/LangStandard.h" +#include "clang/Config/config.h" #include "llvm/ADT/StringSwitch.h" #include "llvm/ADT/Triple.h" #include "llvm/Support/ErrorHandling.h" @@ -57,27 +58,24 @@ 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; + return LangStandard::lang_gnucxx14; -#endif case Language::RenderScript: return LangStandard::lang_c99; case Language::HIP: