diff options
-rw-r--r-- | clang/lib/Basic/Diagnostic.cpp | 7 | ||||
-rw-r--r-- | clang/test/Frontend/warning-mapping-5.c | 9 |
2 files changed, 16 insertions, 0 deletions
diff --git a/clang/lib/Basic/Diagnostic.cpp b/clang/lib/Basic/Diagnostic.cpp index cfe617e2b3c..e5f390196d8 100644 --- a/clang/lib/Basic/Diagnostic.cpp +++ b/clang/lib/Basic/Diagnostic.cpp @@ -175,6 +175,13 @@ void DiagnosticsEngine::setDiagnosticMapping(diag::kind Diag, diag::Mapping Map, DiagnosticMappingInfo MappingInfo = DiagnosticMappingInfo::Make( Map, /*IsUser=*/true, isPragma); + // If this is a pragma mapping, then set the diagnostic mapping flags so that + // we override command line options. + if (isPragma) { + MappingInfo.setNoWarningAsError(true); + MappingInfo.setNoErrorAsFatal(true); + } + // Common case; setting all the diagnostics of a group in one place. if (Loc.isInvalid() || Loc == LastStateChangePos) { GetCurDiagState()->setMappingInfo(Diag, MappingInfo); diff --git a/clang/test/Frontend/warning-mapping-5.c b/clang/test/Frontend/warning-mapping-5.c new file mode 100644 index 00000000000..27d53dc1891 --- /dev/null +++ b/clang/test/Frontend/warning-mapping-5.c @@ -0,0 +1,9 @@ +// Check that #pragma diagnostic warning overrides -Werror. This matches GCC's +// original documentation, but not its earlier implementations. +// +// RUN: %clang_cc1 -verify -Werror %s + +#pragma clang diagnostic warning "-Wsign-compare" +int f0(int x, unsigned y) { + return x < y; // expected-warning {{comparison of integers}} +} |