diff options
author | Richard Smith <richard-llvm@metafoo.co.uk> | 2018-05-24 20:03:51 +0000 |
---|---|---|
committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2018-05-24 20:03:51 +0000 |
commit | 7a985e1b9f62c695e5bafbe62fe5f0495964f18f (patch) | |
tree | 0015b1221f1167387189c8d7ee1965b26398d83c | |
parent | c50150105536df8f83773af2596fc150daa7af3a (diff) | |
download | bcm5719-llvm-7a985e1b9f62c695e5bafbe62fe5f0495964f18f.tar.gz bcm5719-llvm-7a985e1b9f62c695e5bafbe62fe5f0495964f18f.zip |
Improve diagnostics for config mismatches with -fmodule-file.
Unless the user uses -Wno-module-file-config-mismatch (or -Wno-error=...),
allow the AST reader to produce errors describing the nature of the config
mismatch.
llvm-svn: 333220
-rw-r--r-- | clang/include/clang/Basic/DiagnosticSerializationKinds.td | 4 | ||||
-rw-r--r-- | clang/lib/Frontend/CompilerInstance.cpp | 13 | ||||
-rw-r--r-- | clang/test/Modules/check-for-sanitizer-feature.cpp | 2 | ||||
-rw-r--r-- | clang/test/Modules/merge-target-features.cpp | 11 |
4 files changed, 18 insertions, 12 deletions
diff --git a/clang/include/clang/Basic/DiagnosticSerializationKinds.td b/clang/include/clang/Basic/DiagnosticSerializationKinds.td index 03aaaefff2d..ae5c00c74fb 100644 --- a/clang/include/clang/Basic/DiagnosticSerializationKinds.td +++ b/clang/include/clang/Basic/DiagnosticSerializationKinds.td @@ -38,8 +38,8 @@ def err_pch_targetopt_mismatch : Error< "PCH file was compiled for the %0 '%1' but the current translation " "unit is being compiled for target '%2'">; def err_pch_targetopt_feature_mismatch : Error< - "%select{AST file|current translation unit}0 was compiled with the target " - "feature'%1' but the %select{current translation unit is|AST file was}0 " + "%select{AST file was|current translation unit is}0 compiled with the target " + "feature '%1' but the %select{current translation unit is|AST file was}0 " "not">; def err_pch_langopt_mismatch : Error<"%0 was %select{disabled|enabled}1 in " "PCH file but is currently %select{disabled|enabled}2">; diff --git a/clang/lib/Frontend/CompilerInstance.cpp b/clang/lib/Frontend/CompilerInstance.cpp index 859560d938f..d9900867d88 100644 --- a/clang/lib/Frontend/CompilerInstance.cpp +++ b/clang/lib/Frontend/CompilerInstance.cpp @@ -1602,15 +1602,22 @@ bool CompilerInstance::loadModuleFile(StringRef FileName) { if (!ModuleManager) createModuleManager(); + // If -Wmodule-file-config-mismatch is mapped as an error or worse, allow the + // ASTReader to diagnose it, since it can produce better errors that we can. + bool ConfigMismatchIsRecoverable = + getDiagnostics().getDiagnosticLevel(diag::warn_module_config_mismatch, + SourceLocation()) + <= DiagnosticsEngine::Warning; + auto Listener = llvm::make_unique<ReadModuleNames>(*this); auto &ListenerRef = *Listener; ASTReader::ListenerScope ReadModuleNamesListener(*ModuleManager, std::move(Listener)); // Try to load the module file. - switch (ModuleManager->ReadAST(FileName, serialization::MK_ExplicitModule, - SourceLocation(), - ASTReader::ARR_ConfigurationMismatch)) { + switch (ModuleManager->ReadAST( + FileName, serialization::MK_ExplicitModule, SourceLocation(), + ConfigMismatchIsRecoverable ? ASTReader::ARR_ConfigurationMismatch : 0)) { case ASTReader::Success: // We successfully loaded the module file; remember the set of provided // modules so that we don't try to load implicit modules for them. diff --git a/clang/test/Modules/check-for-sanitizer-feature.cpp b/clang/test/Modules/check-for-sanitizer-feature.cpp index 40ae46c6468..c015669071b 100644 --- a/clang/test/Modules/check-for-sanitizer-feature.cpp +++ b/clang/test/Modules/check-for-sanitizer-feature.cpp @@ -43,7 +43,7 @@ // // Import the PCH without ASan enabled (we expect an error). // RUN: not %clang_cc1 -x c -include-pch %t.asan_pch %s -verify 2>&1 | FileCheck %s --check-prefix=PCH_MISMATCH -// PCH_MISMATCH: AST file was compiled with the target feature'-fsanitize=address' but the current translation unit is not +// PCH_MISMATCH: AST file was compiled with the target feature '-fsanitize=address' but the current translation unit is not // // Emit a PCH with UBSan enabled. // RUN: %clang_cc1 -x c -fsanitize=null %S/Inputs/check-for-sanitizer-feature/check.h -emit-pch -o %t.ubsan_pch diff --git a/clang/test/Modules/merge-target-features.cpp b/clang/test/Modules/merge-target-features.cpp index 9ca0539e6a2..6a29c2db8a8 100644 --- a/clang/test/Modules/merge-target-features.cpp +++ b/clang/test/Modules/merge-target-features.cpp @@ -19,10 +19,9 @@ // RUN: -triple i386-unknown-unknown \ // RUN: -target-cpu i386 \ // RUN: -fsyntax-only merge-target-features.cpp 2>&1 \ -// RUN: | FileCheck --check-prefix=SUBSET %s -// SUBSET-NOT: error: +// RUN: | FileCheck --check-prefix=SUBSET --implicit-check-not=error: %s +// SUBSET: error: AST file was compiled with the target feature '+sse2' but the current translation unit is not // SUBSET: error: {{.*}} configuration mismatch -// SUBSET-NOT: error: // // RUN: %clang_cc1 -fmodules -x c++ -fmodules-cache-path=%t \ // RUN: -iquote Inputs/merge-target-features \ @@ -57,10 +56,10 @@ // RUN: -triple i386-unknown-unknown \ // RUN: -target-cpu i386 -target-feature +cx16 \ // RUN: -fsyntax-only merge-target-features.cpp 2>&1 \ -// RUN: | FileCheck --check-prefix=MISMATCH %s -// MISMATCH-NOT: error: +// RUN: | FileCheck --check-prefix=MISMATCH --implicit-check-not=error: %s +// MISMATCH: error: AST file was compiled with the target feature '+sse2' but the current translation unit is not +// MISMATCH: error: current translation unit is compiled with the target feature '+cx16' but the AST file was not // MISMATCH: error: {{.*}} configuration mismatch -// MISMATCH-NOT: error: #include "foo.h" |