Fix crash-on-invalid for 'operator int[]()' in C++11.
Signed off by Richard Smith. llvm-svn: 150464
This commit is contained in:
parent
cfad98f745
commit
cdd91dbe9f
|
@ -1989,11 +1989,12 @@ void Parser::ParseCXXClassMemberDeclaration(AccessSpecifier AS,
|
|||
// declarator is followed by an initializer.
|
||||
//
|
||||
// A brace-or-equal-initializer for a member-declarator is not an
|
||||
// initializer in the gramamr, so this is ill-formed.
|
||||
// initializer in the grammar, so this is ill-formed.
|
||||
Diag(Tok, diag::err_incomplete_array_member_init);
|
||||
SkipUntil(tok::comma, true, true);
|
||||
// Avoid later warnings about a class member of incomplete type.
|
||||
ThisDecl->setInvalidDecl();
|
||||
if (ThisDecl)
|
||||
// Avoid later warnings about a class member of incomplete type.
|
||||
ThisDecl->setInvalidDecl();
|
||||
} else
|
||||
ParseCXXNonStaticMemberInitializer(ThisDecl);
|
||||
} else if (HasInitializer) {
|
||||
|
|
|
@ -29,6 +29,9 @@ const int C = 0, D = 0;
|
|||
struct S {
|
||||
int as[] = { decltype(x)::B<C, D>(0) }; // expected-error {{array bound cannot be deduced from an in-class initializer}}
|
||||
T<sizeof(as) / sizeof(int)> x; // expected-error {{requires a type specifier}}
|
||||
// test that we handle invalid array bound deductions without crashing when the declarator name is itself invalid
|
||||
operator int[](){}; // expected-error {{'operator int' cannot be the name of a variable or data member}} \
|
||||
// expected-error {{array bound cannot be deduced from an in-class initializer}}
|
||||
};
|
||||
|
||||
struct ThrowCtor { ThrowCtor(int) noexcept(false); };
|
||||
|
|
Loading…
Reference in New Issue