diff options
author | Bob Wilson <bob.wilson@apple.com> | 2011-10-12 19:55:31 +0000 |
---|---|---|
committer | Bob Wilson <bob.wilson@apple.com> | 2011-10-12 19:55:31 +0000 |
commit | 18c407fcb25ea88a52ad48fcc4397c3616dd185d (patch) | |
tree | f478e680addb668dedbed8c48262c47bd0398873 | |
parent | 6700415542121e2cb7d867728046ffa21e402019 (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
-rw-r--r-- | lib/Basic/DiagnosticIDs.cpp | 9 | ||||
-rw-r--r-- | test/Sema/implicit-int.c | 6 |
2 files changed, 7 insertions, 8 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 diff --git a/test/Sema/implicit-int.c b/test/Sema/implicit-int.c index 1bb9a83853..3063db66ed 100644 --- a/test/Sema/implicit-int.c +++ b/test/Sema/implicit-int.c @@ -24,9 +24,5 @@ h19_insline(n) // expected-warning {{parameter 'n' was not declared, defaulting } struct foo { - __extension__ __attribute__((packed)) x : 4; + __extension__ __attribute__((packed)) x : 4; // expected-warning {{type specifier missing, defaults to 'int'}} }; - - - - |