forked from OSchip/llvm-project
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. llvm-svn: 141804
This commit is contained in:
parent
2d21ab024e
commit
73a4deb33d
|
@ -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
|
||||
|
|
|
@ -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'}}
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue