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
!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
}
struct foo {
- __extension__ __attribute__((packed)) x : 4;
+ __extension__ __attribute__((packed)) x : 4; // expected-warning {{type specifier missing, defaults to 'int'}}
};
-
-
-
-