aboutsummaryrefslogtreecommitdiff
path: root/lib/Basic
diff options
context:
space:
mode:
authorBob Wilson <bob.wilson@apple.com>2011-10-12 19:55:31 +0000
committerBob Wilson <bob.wilson@apple.com>2011-10-12 19:55:31 +0000
commit18c407fcb25ea88a52ad48fcc4397c3616dd185d (patch)
treef478e680addb668dedbed8c48262c47bd0398873 /lib/Basic
parent6700415542121e2cb7d867728046ffa21e402019 (diff)
Change __extension__ to disable only diagnostics controlled by -pedantic.
This changes clang to match GCC's behavior for __extension__, which temporarily disables the -pedantic flag. Warnings that are enabled without -pedantic are not affected. Besides the general goodness of matching GCC's precedent, my motivation for this is that macros in the arm_neon.h header need to use __extension__ to avoid pedantic complaints about their use of statement expressions, yet we still want to warn about incompatible pointer arguments for those macros. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@141804 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Basic')
-rw-r--r--lib/Basic/DiagnosticIDs.cpp9
1 files changed, 6 insertions, 3 deletions
diff --git a/lib/Basic/DiagnosticIDs.cpp b/lib/Basic/DiagnosticIDs.cpp
index 9d460a5c9a..9481287c08 100644
--- a/lib/Basic/DiagnosticIDs.cpp
+++ b/lib/Basic/DiagnosticIDs.cpp
@@ -550,9 +550,12 @@ DiagnosticIDs::getDiagnosticLevel(unsigned DiagID, unsigned DiagClass,
!MappingInfo.isUser())
Result = DiagnosticIDs::Warning;
- // Ignore any kind of extension diagnostics inside __extension__ blocks.
- bool IsExtensionDiag = isBuiltinExtensionDiag(DiagID);
- if (Diag.AllExtensionsSilenced && IsExtensionDiag)
+ // Ignore -pedantic diagnostics inside __extension__ blocks.
+ // (The diagnostics controlled by -pedantic are the extension diagnostics
+ // that are not enabled by default.)
+ bool EnabledByDefault;
+ bool IsExtensionDiag = isBuiltinExtensionDiag(DiagID, EnabledByDefault);
+ if (Diag.AllExtensionsSilenced && IsExtensionDiag && !EnabledByDefault)
return DiagnosticIDs::Ignored;
// For extension diagnostics that haven't been explicitly mapped, check if we