forked from OSchip/llvm-project
Fix parsing of class specifiers before '\n' 'operator'.
r159549 / r159164 regressed clang to reject struct s {}; struct s operator++(struct s a) { return a; } This fixes the regression. Richard, pleas check if this looks right. llvm-svn: 172834
This commit is contained in:
parent
1dc3940383
commit
0bba2d11d0
|
@ -964,6 +964,7 @@ bool Parser::isValidAfterTypeSpecifier(bool CouldBeBitfield) {
|
|||
case tok::annot_template_id: // struct foo {...} a<int> ::b;
|
||||
case tok::l_paren: // struct foo {...} ( x);
|
||||
case tok::comma: // __builtin_offsetof(struct foo{...} ,
|
||||
case tok::kw_operator: // struct foo operator++() {...}
|
||||
return true;
|
||||
case tok::colon:
|
||||
return CouldBeBitfield; // enum E { ... } : 2;
|
||||
|
|
|
@ -132,6 +132,24 @@ struct S {
|
|||
typedef S() : n(1), m(2) { } // expected-error {{function definition declared 'typedef'}}
|
||||
};
|
||||
|
||||
|
||||
namespace TestIsValidAfterTypeSpecifier {
|
||||
struct s {};
|
||||
|
||||
namespace a {
|
||||
struct s operator++(struct s a)
|
||||
{ return a; }
|
||||
}
|
||||
|
||||
namespace b {
|
||||
// The newline after s should make no difference.
|
||||
struct s
|
||||
operator++(struct s a)
|
||||
{ return a; }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// PR8380
|
||||
extern "" // expected-error {{unknown linkage language}}
|
||||
test6a { ;// expected-error {{C++ requires a type specifier for all declarations}} \
|
||||
|
|
Loading…
Reference in New Issue