forked from OSchip/llvm-project
PR41192: fix cases where "missing ';' after class" error would
incorrectly fire. llvm-svn: 358467
This commit is contained in:
parent
1826095a5f
commit
1600e24521
|
@ -1248,9 +1248,11 @@ bool Parser::isValidAfterTypeSpecifier(bool CouldBeBitfield) {
|
||||||
case tok::ampamp: // struct foo {...} && R = ...
|
case tok::ampamp: // struct foo {...} && R = ...
|
||||||
case tok::identifier: // struct foo {...} V ;
|
case tok::identifier: // struct foo {...} V ;
|
||||||
case tok::r_paren: //(struct foo {...} ) {4}
|
case tok::r_paren: //(struct foo {...} ) {4}
|
||||||
|
case tok::coloncolon: // struct foo {...} :: a::b;
|
||||||
case tok::annot_cxxscope: // struct foo {...} a:: b;
|
case tok::annot_cxxscope: // struct foo {...} a:: b;
|
||||||
case tok::annot_typename: // struct foo {...} a ::b;
|
case tok::annot_typename: // struct foo {...} a ::b;
|
||||||
case tok::annot_template_id: // struct foo {...} a<int> ::b;
|
case tok::annot_template_id: // struct foo {...} a<int> ::b;
|
||||||
|
case tok::kw_decltype: // struct foo {...} decltype (a)::b;
|
||||||
case tok::l_paren: // struct foo {...} ( x);
|
case tok::l_paren: // struct foo {...} ( x);
|
||||||
case tok::comma: // __builtin_offsetof(struct foo{...} ,
|
case tok::comma: // __builtin_offsetof(struct foo{...} ,
|
||||||
case tok::kw_operator: // struct foo operator ++() {...}
|
case tok::kw_operator: // struct foo operator ++() {...}
|
||||||
|
|
|
@ -13,10 +13,9 @@ template<> struct import<0> {
|
||||||
};
|
};
|
||||||
|
|
||||||
// OK, not an import-declaration.
|
// OK, not an import-declaration.
|
||||||
// FIXME: This is valid, see PR41192
|
struct A {}
|
||||||
struct A {} // FIXME expected-error {{expected ';'}}
|
|
||||||
::import
|
::import
|
||||||
<empty.h>::a; // FIXME expected-error {{requires a type specifier}}
|
<empty.h>::a;
|
||||||
|
|
||||||
// This is invalid: the tokens after 'import' are a header-name, so cannot be
|
// This is invalid: the tokens after 'import' are a header-name, so cannot be
|
||||||
// parsed as a template-argument-list.
|
// parsed as a template-argument-list.
|
||||||
|
|
|
@ -272,6 +272,17 @@ class BadExceptionSpec {
|
||||||
));
|
));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
namespace PR41192 {
|
||||||
|
extern struct A a;
|
||||||
|
struct A {} ::PR41192::a; // ok, no missing ';' here expected-warning {{extra qualification}}
|
||||||
|
|
||||||
|
#if __cplusplus >= 201103L
|
||||||
|
struct C;
|
||||||
|
struct D { static C c; };
|
||||||
|
struct C {} decltype(D())::c; // expected-error {{'decltype' cannot be used to name a declaration}}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
// PR11109 must appear at the end of the source file
|
// PR11109 must appear at the end of the source file
|
||||||
class pr11109r3 { // expected-note{{to match this '{'}}
|
class pr11109r3 { // expected-note{{to match this '{'}}
|
||||||
public // expected-error{{expected ':'}} expected-error{{expected '}'}} expected-error{{expected ';' after class}}
|
public // expected-error{{expected ':'}} expected-error{{expected '}'}} expected-error{{expected ';' after class}}
|
||||||
|
|
Loading…
Reference in New Issue