forked from OSchip/llvm-project
For -Wignored-qualifiers, don't warn on qualifiers which we acquire via a
typedef. Also don't warn on the _Atomic type specifier, just on the _Atomic type qualifier. llvm-svn: 178218
This commit is contained in:
parent
8bff9616ef
commit
8ea9720b90
|
@ -1888,7 +1888,9 @@ static void diagnoseIgnoredQualifiers(
|
|||
SourceLocation VolatileQualLoc = SourceLocation(),
|
||||
SourceLocation RestrictQualLoc = SourceLocation(),
|
||||
SourceLocation AtomicQualLoc = SourceLocation()) {
|
||||
assert(Quals && "no qualifiers to diagnose");
|
||||
if (!Quals)
|
||||
return;
|
||||
|
||||
const SourceManager &SM = S.getSourceManager();
|
||||
|
||||
struct Qual {
|
||||
|
@ -1933,12 +1935,10 @@ static void diagnoseIgnoredQualifiers(
|
|||
static void diagnoseIgnoredFunctionQualifiers(Sema &S, QualType RetTy,
|
||||
Declarator &D,
|
||||
unsigned FunctionChunkIndex) {
|
||||
unsigned AtomicQual = RetTy->isAtomicType() ? DeclSpec::TQ_atomic : 0;
|
||||
|
||||
if (D.getTypeObject(FunctionChunkIndex).Fun.hasTrailingReturnType()) {
|
||||
// FIXME: TypeSourceInfo doesn't preserve location information for
|
||||
// qualifiers.
|
||||
diagnoseIgnoredQualifiers(S, RetTy.getCVRQualifiers() | AtomicQual,
|
||||
diagnoseIgnoredQualifiers(S, RetTy.getLocalCVRQualifiers(),
|
||||
D.getIdentifierLoc());
|
||||
return;
|
||||
}
|
||||
|
@ -1970,6 +1970,7 @@ static void diagnoseIgnoredFunctionQualifiers(Sema &S, QualType RetTy,
|
|||
case DeclaratorChunk::MemberPointer:
|
||||
// FIXME: We can't currently provide an accurate source location and a
|
||||
// fix-it hint for these.
|
||||
unsigned AtomicQual = RetTy->isAtomicType() ? DeclSpec::TQ_atomic : 0;
|
||||
diagnoseIgnoredQualifiers(S, RetTy.getCVRQualifiers() | AtomicQual,
|
||||
D.getIdentifierLoc());
|
||||
return;
|
||||
|
@ -1986,7 +1987,7 @@ static void diagnoseIgnoredFunctionQualifiers(Sema &S, QualType RetTy,
|
|||
|
||||
// Just parens all the way out to the decl specifiers. Diagnose any qualifiers
|
||||
// which are present there.
|
||||
diagnoseIgnoredQualifiers(S, D.getDeclSpec().getTypeQualifiers() | AtomicQual,
|
||||
diagnoseIgnoredQualifiers(S, D.getDeclSpec().getTypeQualifiers(),
|
||||
D.getIdentifierLoc(),
|
||||
D.getDeclSpec().getConstSpecLoc(),
|
||||
D.getDeclSpec().getVolatileSpecLoc(),
|
||||
|
|
|
@ -244,6 +244,11 @@ const int ignored_c_quals(); // expected-warning{{'const' type qualifier on retu
|
|||
const volatile int ignored_cv_quals(); // expected-warning{{'const volatile' type qualifiers on return type have no effect}}
|
||||
char* const volatile restrict ignored_cvr_quals(); // expected-warning{{'const volatile restrict' type qualifiers on return type have no effect}}
|
||||
|
||||
typedef const int CI;
|
||||
CI ignored_quals_typedef();
|
||||
|
||||
const CI ignored_quals_typedef_2(); // expected-warning{{'const' type qualifier}}
|
||||
|
||||
// Test that for switch(enum) that if the switch statement covers all the cases
|
||||
// that we don't consider that for -Wreturn-type.
|
||||
enum Cases { C1, C2, C3, C4 };
|
||||
|
|
|
@ -55,8 +55,7 @@ mixed_ret(); // expected-warning {{'volatile' type qualifier on return type has
|
|||
const int volatile // expected-warning {{'const volatile' type qualifiers on return type have no effect}}
|
||||
(((parens())));
|
||||
|
||||
_Atomic(int)
|
||||
atomic(); // expected-warning {{'_Atomic' type qualifier on return type has no effect}}
|
||||
_Atomic(int) atomic();
|
||||
|
||||
_Atomic // expected-warning {{'_Atomic' type qualifier on return type has no effect}}
|
||||
int
|
||||
|
|
Loading…
Reference in New Issue