Rejecting the mutable specifier on a freestanding type declaration, instead of supporting it as a "extension" (which serves no purpose). Un-XFAILing the test for mutable specifiers.
llvm-svn: 209635
This commit is contained in:
parent
265dfa411c
commit
5a1ef6b411
|
@ -3344,10 +3344,15 @@ Decl *Sema::ParsedFreeStandingDeclSpec(Scope *S, AccessSpecifier AS,
|
|||
// Note that a linkage-specification sets a storage class, but
|
||||
// 'extern "C" struct foo;' is actually valid and not theoretically
|
||||
// useless.
|
||||
if (DeclSpec::SCS SCS = DS.getStorageClassSpec())
|
||||
if (!DS.isExternInLinkageSpec() && SCS != DeclSpec::SCS_typedef)
|
||||
if (DeclSpec::SCS SCS = DS.getStorageClassSpec()) {
|
||||
if (SCS == DeclSpec::SCS_mutable)
|
||||
// Since mutable is not a viable storage class specifier in C, there is
|
||||
// no reason to treat it as an extension. Instead, diagnose as an error.
|
||||
Diag(DS.getStorageClassSpecLoc(), diag::err_mutable_nonmember);
|
||||
else if (!DS.isExternInLinkageSpec() && SCS != DeclSpec::SCS_typedef)
|
||||
Diag(DS.getStorageClassSpecLoc(), DiagID)
|
||||
<< DeclSpec::getSpecifierName(SCS);
|
||||
}
|
||||
|
||||
if (DeclSpec::TSCS TSCS = DS.getThreadStorageClassSpec())
|
||||
Diag(DS.getThreadStorageClassSpecLoc(), DiagID)
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
// RUN: %clang_cc1 -verify %s
|
||||
// XFAIL: *
|
||||
// RUN: %clang_cc1 -fsyntax-only -verify %s
|
||||
|
||||
typedef const int T0;
|
||||
typedef int& T1;
|
||||
|
@ -9,6 +8,6 @@ struct s0 {
|
|||
mutable T0 f1; // expected-error{{'mutable' and 'const' cannot be mixed}}
|
||||
mutable int &f2; // expected-error{{'mutable' cannot be applied to references}}
|
||||
mutable T1 f3; // expected-error{{'mutable' cannot be applied to references}}
|
||||
mutable struct s1 {}; // expected-error{{'mutable' cannot be applied to non-data members}}
|
||||
mutable struct s1 {}; // expected-error{{'mutable' can only be applied to member variables}}
|
||||
mutable void im0(); // expected-error{{'mutable' cannot be applied to functions}}
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue