diff options
Diffstat (limited to 'contrib/llvm/tools/clang/lib/Frontend/InitPreprocessor.cpp')
| -rw-r--r-- | contrib/llvm/tools/clang/lib/Frontend/InitPreprocessor.cpp | 166 | 
1 files changed, 93 insertions, 73 deletions
diff --git a/contrib/llvm/tools/clang/lib/Frontend/InitPreprocessor.cpp b/contrib/llvm/tools/clang/lib/Frontend/InitPreprocessor.cpp index 7a9d09a5e7ac..f4241a94ae02 100644 --- a/contrib/llvm/tools/clang/lib/Frontend/InitPreprocessor.cpp +++ b/contrib/llvm/tools/clang/lib/Frontend/InitPreprocessor.cpp @@ -65,17 +65,14 @@ static void DefineBuiltinMacro(MacroBuilder &Builder, StringRef Macro,  /// AddImplicitInclude - Add an implicit \#include of the specified file to the  /// predefines buffer. -static void AddImplicitInclude(MacroBuilder &Builder, StringRef File, -                               FileManager &FileMgr) { -  Builder.append(Twine("#include \"") + -                 HeaderSearch::NormalizeDashIncludePath(File, FileMgr) + "\""); +/// As these includes are generated by -include arguments the header search +/// logic is going to search relatively to the current working directory. +static void AddImplicitInclude(MacroBuilder &Builder, StringRef File) { +  Builder.append(Twine("#include \"") + File + "\"");  } -static void AddImplicitIncludeMacros(MacroBuilder &Builder, -                                     StringRef File, -                                     FileManager &FileMgr) { -  Builder.append(Twine("#__include_macros \"") + -                 HeaderSearch::NormalizeDashIncludePath(File, FileMgr) + "\""); +static void AddImplicitIncludeMacros(MacroBuilder &Builder, StringRef File) { +  Builder.append(Twine("#__include_macros \"") + File + "\"");    // Marker token to stop the __include_macros fetch loop.    Builder.append("##"); // ##?  } @@ -94,7 +91,7 @@ static void AddImplicitIncludePTH(MacroBuilder &Builder, Preprocessor &PP,      return;    } -  AddImplicitInclude(Builder, OriginalFile, PP.getFileManager()); +  AddImplicitInclude(Builder, OriginalFile);  }  /// \brief Add an implicit \#include using the original file used to generate @@ -107,7 +104,7 @@ static void AddImplicitIncludePCH(MacroBuilder &Builder, Preprocessor &PP,    if (OriginalFile.empty())      return; -  AddImplicitInclude(Builder, OriginalFile, PP.getFileManager()); +  AddImplicitInclude(Builder, OriginalFile);  }  /// PickFP - This is used to pick a value based on the FP semantics of the @@ -378,7 +375,7 @@ static void InitializeStandardPredefinedMacros(const TargetInfo &TI,      // C++1y [cpp.predefined]p1:      //   The name __cplusplus is defined to the value 201402L when compiling a      //   C++ translation unit. -    else if (LangOpts.CPlusPlus1y) +    else if (LangOpts.CPlusPlus14)        Builder.defineMacro("__cplusplus", "201402L");      // C++11 [cpp.predefined]p1:      //   The name __cplusplus is defined to the value 201103L when compiling a @@ -412,6 +409,12 @@ static void InitializeStandardPredefinedMacros(const TargetInfo &TI,  /// ISO/IEC JTC1/SC22/WG21 (C++) SD-6: "SG10 Feature Test Recommendations".  static void InitializeCPlusPlusFeatureTestMacros(const LangOptions &LangOpts,                                                   MacroBuilder &Builder) { +  // C++98 features. +  if (LangOpts.RTTI) +    Builder.defineMacro("__cpp_rtti", "199711"); +  if (LangOpts.CXXExceptions) +    Builder.defineMacro("__cpp_exceptions", "199711"); +    // C++11 features.    if (LangOpts.CPlusPlus11) {      Builder.defineMacro("__cpp_unicode_characters", "200704"); @@ -420,17 +423,25 @@ static void InitializeCPlusPlusFeatureTestMacros(const LangOptions &LangOpts,      Builder.defineMacro("__cpp_user_defined_literals", "200809");      Builder.defineMacro("__cpp_lambdas", "200907");      Builder.defineMacro("__cpp_constexpr", -                        LangOpts.CPlusPlus1y ? "201304" : "200704"); +                        LangOpts.CPlusPlus14 ? "201304" : "200704"); +    Builder.defineMacro("__cpp_range_based_for", "200907");      Builder.defineMacro("__cpp_static_assert", "200410");      Builder.defineMacro("__cpp_decltype", "200707");      Builder.defineMacro("__cpp_attributes", "200809");      Builder.defineMacro("__cpp_rvalue_references", "200610");      Builder.defineMacro("__cpp_variadic_templates", "200704"); +    Builder.defineMacro("__cpp_initializer_lists", "200806"); +    Builder.defineMacro("__cpp_delegating_constructors", "200604"); +    Builder.defineMacro("__cpp_nsdmi", "200809"); +    Builder.defineMacro("__cpp_inheriting_constructors", "200802"); +    Builder.defineMacro("__cpp_ref_qualifiers", "200710"); +    Builder.defineMacro("__cpp_alias_templates", "200704");    }    // C++14 features. -  if (LangOpts.CPlusPlus1y) { +  if (LangOpts.CPlusPlus14) {      Builder.defineMacro("__cpp_binary_literals", "201304"); +    Builder.defineMacro("__cpp_digit_separators", "201309");      Builder.defineMacro("__cpp_init_captures", "201304");      Builder.defineMacro("__cpp_generic_lambdas", "201304");      Builder.defineMacro("__cpp_decltype_auto", "201304"); @@ -438,6 +449,8 @@ static void InitializeCPlusPlusFeatureTestMacros(const LangOptions &LangOpts,      Builder.defineMacro("__cpp_aggregate_nsdmi", "201304");      Builder.defineMacro("__cpp_variable_templates", "201304");    } +  if (LangOpts.SizedDeallocation) +    Builder.defineMacro("__cpp_sized_deallocation", "201309");  }  static void InitializePredefinedMacros(const TargetInfo &TI, @@ -530,6 +543,8 @@ static void InitializePredefinedMacros(const TargetInfo &TI,      Builder.defineMacro("IBOutletCollection(ClassName)",                          "__attribute__((iboutletcollection(ClassName)))");      Builder.defineMacro("IBAction", "void)__attribute__((ibaction)"); +    Builder.defineMacro("IBInspectable", ""); +    Builder.defineMacro("IB_DESIGNABLE", "");    }    if (LangOpts.CPlusPlus) @@ -551,7 +566,7 @@ static void InitializePredefinedMacros(const TargetInfo &TI,      Builder.defineMacro("__BLOCKS__");    } -  if (!LangOpts.MSVCCompat && LangOpts.CXXExceptions) +  if (!LangOpts.MSVCCompat && LangOpts.Exceptions)      Builder.defineMacro("__EXCEPTIONS");    if (!LangOpts.MSVCCompat && LangOpts.RTTI)      Builder.defineMacro("__GXX_RTTI"); @@ -626,12 +641,10 @@ static void InitializePredefinedMacros(const TargetInfo &TI,    DefineTypeSize("__INTMAX_MAX__", TI.getIntMaxType(), TI, Builder);    DefineTypeSize("__SIZE_MAX__", TI.getSizeType(), TI, Builder); -  if (!LangOpts.MSVCCompat) { -    DefineTypeSize("__UINTMAX_MAX__", TI.getUIntMaxType(), TI, Builder); -    DefineTypeSize("__PTRDIFF_MAX__", TI.getPtrDiffType(0), TI, Builder); -    DefineTypeSize("__INTPTR_MAX__", TI.getIntPtrType(), TI, Builder); -    DefineTypeSize("__UINTPTR_MAX__", TI.getUIntPtrType(), TI, Builder); -  } +  DefineTypeSize("__UINTMAX_MAX__", TI.getUIntMaxType(), TI, Builder); +  DefineTypeSize("__PTRDIFF_MAX__", TI.getPtrDiffType(0), TI, Builder); +  DefineTypeSize("__INTPTR_MAX__", TI.getIntPtrType(), TI, Builder); +  DefineTypeSize("__UINTPTR_MAX__", TI.getUIntPtrType(), TI, Builder);    DefineTypeSizeof("__SIZEOF_DOUBLE__", TI.getDoubleWidth(), TI, Builder);    DefineTypeSizeof("__SIZEOF_FLOAT__", TI.getFloatWidth(), TI, Builder); @@ -649,7 +662,12 @@ static void InitializePredefinedMacros(const TargetInfo &TI,                     TI.getTypeWidth(TI.getWCharType()), TI, Builder);    DefineTypeSizeof("__SIZEOF_WINT_T__",                     TI.getTypeWidth(TI.getWIntType()), TI, Builder); -  if (TI.hasInt128Type()) +  // This is a temporary workaround while MIPS64 has not yet fully supported +  // 128-bit integers. But declaration of int128 type is necessary even though +  // __SIZEOF_INT128__ is undefined because c++ standard header files like +  // limits throw error message if __int128 is not available. +  if (TI.hasInt128Type() && !(TI.getTriple().getArch() == llvm::Triple::mips64el +                   || TI.getTriple().getArch() == llvm::Triple::mips64))      DefineTypeSizeof("__SIZEOF_INT128__", 128, TI, Builder);    DefineType("__INTMAX_TYPE__", TI.getIntMaxType(), Builder); @@ -679,12 +697,10 @@ static void InitializePredefinedMacros(const TargetInfo &TI,    DefineType("__CHAR16_TYPE__", TI.getChar16Type(), Builder);    DefineType("__CHAR32_TYPE__", TI.getChar32Type(), Builder); -  if (!LangOpts.MSVCCompat) { -    DefineTypeWidth("__UINTMAX_WIDTH__",  TI.getUIntMaxType(), TI, Builder); -    DefineType("__UINTPTR_TYPE__", TI.getUIntPtrType(), Builder); -    DefineFmt("__UINTPTR", TI.getUIntPtrType(), TI, Builder); -    DefineTypeWidth("__UINTPTR_WIDTH__", TI.getUIntPtrType(), TI, Builder); -  } +  DefineTypeWidth("__UINTMAX_WIDTH__",  TI.getUIntMaxType(), TI, Builder); +  DefineType("__UINTPTR_TYPE__", TI.getUIntPtrType(), Builder); +  DefineFmt("__UINTPTR", TI.getUIntPtrType(), TI, Builder); +  DefineTypeWidth("__UINTPTR_WIDTH__", TI.getUIntPtrType(), TI, Builder);    DefineFloatMacros(Builder, "FLT", &TI.getFloatFormat(), "F");    DefineFloatMacros(Builder, "DBL", &TI.getDoubleFormat(), ""); @@ -718,54 +734,52 @@ static void InitializePredefinedMacros(const TargetInfo &TI,    if (TI.getLongLongWidth() > TI.getLongWidth())      DefineExactWidthIntType(TargetInfo::SignedLongLong, TI, Builder); -  if (!LangOpts.MSVCCompat) { -    DefineExactWidthIntType(TargetInfo::UnsignedChar, TI, Builder); -    DefineExactWidthIntTypeSize(TargetInfo::UnsignedChar, TI, Builder); -    DefineExactWidthIntTypeSize(TargetInfo::SignedChar, TI, Builder); - -    if (TI.getShortWidth() > TI.getCharWidth()) { -      DefineExactWidthIntType(TargetInfo::UnsignedShort, TI, Builder); -      DefineExactWidthIntTypeSize(TargetInfo::UnsignedShort, TI, Builder); -      DefineExactWidthIntTypeSize(TargetInfo::SignedShort, TI, Builder); -    } +  DefineExactWidthIntType(TargetInfo::UnsignedChar, TI, Builder); +  DefineExactWidthIntTypeSize(TargetInfo::UnsignedChar, TI, Builder); +  DefineExactWidthIntTypeSize(TargetInfo::SignedChar, TI, Builder); -    if (TI.getIntWidth() > TI.getShortWidth()) { -      DefineExactWidthIntType(TargetInfo::UnsignedInt, TI, Builder); -      DefineExactWidthIntTypeSize(TargetInfo::UnsignedInt, TI, Builder); -      DefineExactWidthIntTypeSize(TargetInfo::SignedInt, TI, Builder); -    } +  if (TI.getShortWidth() > TI.getCharWidth()) { +    DefineExactWidthIntType(TargetInfo::UnsignedShort, TI, Builder); +    DefineExactWidthIntTypeSize(TargetInfo::UnsignedShort, TI, Builder); +    DefineExactWidthIntTypeSize(TargetInfo::SignedShort, TI, Builder); +  } -    if (TI.getLongWidth() > TI.getIntWidth()) { -      DefineExactWidthIntType(TargetInfo::UnsignedLong, TI, Builder); -      DefineExactWidthIntTypeSize(TargetInfo::UnsignedLong, TI, Builder); -      DefineExactWidthIntTypeSize(TargetInfo::SignedLong, TI, Builder); -    } +  if (TI.getIntWidth() > TI.getShortWidth()) { +    DefineExactWidthIntType(TargetInfo::UnsignedInt, TI, Builder); +    DefineExactWidthIntTypeSize(TargetInfo::UnsignedInt, TI, Builder); +    DefineExactWidthIntTypeSize(TargetInfo::SignedInt, TI, Builder); +  } -    if (TI.getLongLongWidth() > TI.getLongWidth()) { -      DefineExactWidthIntType(TargetInfo::UnsignedLongLong, TI, Builder); -      DefineExactWidthIntTypeSize(TargetInfo::UnsignedLongLong, TI, Builder); -      DefineExactWidthIntTypeSize(TargetInfo::SignedLongLong, TI, Builder); -    } +  if (TI.getLongWidth() > TI.getIntWidth()) { +    DefineExactWidthIntType(TargetInfo::UnsignedLong, TI, Builder); +    DefineExactWidthIntTypeSize(TargetInfo::UnsignedLong, TI, Builder); +    DefineExactWidthIntTypeSize(TargetInfo::SignedLong, TI, Builder); +  } -    DefineLeastWidthIntType(8, true, TI, Builder); -    DefineLeastWidthIntType(8, false, TI, Builder); -    DefineLeastWidthIntType(16, true, TI, Builder); -    DefineLeastWidthIntType(16, false, TI, Builder); -    DefineLeastWidthIntType(32, true, TI, Builder); -    DefineLeastWidthIntType(32, false, TI, Builder); -    DefineLeastWidthIntType(64, true, TI, Builder); -    DefineLeastWidthIntType(64, false, TI, Builder); - -    DefineFastIntType(8, true, TI, Builder); -    DefineFastIntType(8, false, TI, Builder); -    DefineFastIntType(16, true, TI, Builder); -    DefineFastIntType(16, false, TI, Builder); -    DefineFastIntType(32, true, TI, Builder); -    DefineFastIntType(32, false, TI, Builder); -    DefineFastIntType(64, true, TI, Builder); -    DefineFastIntType(64, false, TI, Builder); +  if (TI.getLongLongWidth() > TI.getLongWidth()) { +    DefineExactWidthIntType(TargetInfo::UnsignedLongLong, TI, Builder); +    DefineExactWidthIntTypeSize(TargetInfo::UnsignedLongLong, TI, Builder); +    DefineExactWidthIntTypeSize(TargetInfo::SignedLongLong, TI, Builder);    } +  DefineLeastWidthIntType(8, true, TI, Builder); +  DefineLeastWidthIntType(8, false, TI, Builder); +  DefineLeastWidthIntType(16, true, TI, Builder); +  DefineLeastWidthIntType(16, false, TI, Builder); +  DefineLeastWidthIntType(32, true, TI, Builder); +  DefineLeastWidthIntType(32, false, TI, Builder); +  DefineLeastWidthIntType(64, true, TI, Builder); +  DefineLeastWidthIntType(64, false, TI, Builder); + +  DefineFastIntType(8, true, TI, Builder); +  DefineFastIntType(8, false, TI, Builder); +  DefineFastIntType(16, true, TI, Builder); +  DefineFastIntType(16, false, TI, Builder); +  DefineFastIntType(32, true, TI, Builder); +  DefineFastIntType(32, false, TI, Builder); +  DefineFastIntType(64, true, TI, Builder); +  DefineFastIntType(64, false, TI, Builder); +    if (const char *Prefix = TI.getUserLabelPrefix())      Builder.defineMacro("__USER_LABEL_PREFIX__", Prefix); @@ -861,6 +875,13 @@ static void InitializePredefinedMacros(const TargetInfo &TI,      Builder.defineMacro("_OPENMP", "201307");    } +  // CUDA device path compilaton +  if (LangOpts.CUDAIsDevice) { +    // The CUDA_ARCH value is set for the GPU target specified in the NVPTX +    // backend's target defines. +    Builder.defineMacro("__CUDA_ARCH__"); +  } +    // Get other target #defines.    TI.getTargetDefines(LangOpts, Builder);  } @@ -925,8 +946,7 @@ void clang::InitializePreprocessor(Preprocessor &PP,    // If -imacros are specified, include them now.  These are processed before    // any -include directives.    for (unsigned i = 0, e = InitOpts.MacroIncludes.size(); i != e; ++i) -    AddImplicitIncludeMacros(Builder, InitOpts.MacroIncludes[i], -                             PP.getFileManager()); +    AddImplicitIncludeMacros(Builder, InitOpts.MacroIncludes[i]);    // Process -include-pch/-include-pth directives.    if (!InitOpts.ImplicitPCHInclude.empty()) @@ -937,7 +957,7 @@ void clang::InitializePreprocessor(Preprocessor &PP,    // Process -include directives.    for (unsigned i = 0, e = InitOpts.Includes.size(); i != e; ++i) {      const std::string &Path = InitOpts.Includes[i]; -    AddImplicitInclude(Builder, Path, PP.getFileManager()); +    AddImplicitInclude(Builder, Path);    }    // Exit the command line and go back to <built-in> (2 is LC_LEAVE).  | 
