diff options
Diffstat (limited to 'lib/Serialization/ASTReader.cpp')
| -rw-r--r-- | lib/Serialization/ASTReader.cpp | 29 | 
1 files changed, 29 insertions, 0 deletions
diff --git a/lib/Serialization/ASTReader.cpp b/lib/Serialization/ASTReader.cpp index b7bbb9dc7be11..e16a9b3ee3b50 100644 --- a/lib/Serialization/ASTReader.cpp +++ b/lib/Serialization/ASTReader.cpp @@ -292,6 +292,33 @@ static bool checkLanguageOptions(const LangOptions &LangOpts,      return true;    } +  // Sanitizer feature mismatches are treated as compatible differences. If +  // compatible differences aren't allowed, we still only want to check for +  // mismatches of non-modular sanitizers (the only ones which can affect AST +  // generation). +  if (!AllowCompatibleDifferences) { +    SanitizerMask ModularSanitizers = getPPTransparentSanitizers(); +    SanitizerSet ExistingSanitizers = ExistingLangOpts.Sanitize; +    SanitizerSet ImportedSanitizers = LangOpts.Sanitize; +    ExistingSanitizers.clear(ModularSanitizers); +    ImportedSanitizers.clear(ModularSanitizers); +    if (ExistingSanitizers.Mask != ImportedSanitizers.Mask) { +      const std::string Flag = "-fsanitize="; +      if (Diags) { +#define SANITIZER(NAME, ID)                                                    \ +  {                                                                            \ +    bool InExistingModule = ExistingSanitizers.has(SanitizerKind::ID);         \ +    bool InImportedModule = ImportedSanitizers.has(SanitizerKind::ID);         \ +    if (InExistingModule != InImportedModule)                                  \ +      Diags->Report(diag::err_pch_targetopt_feature_mismatch)                  \ +          << InExistingModule << (Flag + NAME);                                \ +  } +#include "clang/Basic/Sanitizers.def" +      } +      return true; +    } +  } +    return false;  } @@ -3670,6 +3697,8 @@ static void updateModuleTimestamp(ModuleFile &MF) {    if (EC)      return;    OS << "Timestamp file\n"; +  OS.close(); +  OS.clear_error(); // Avoid triggering a fatal error.  }  /// \brief Given a cursor at the start of an AST file, scan ahead and drop the  | 
