forked from OSchip/llvm-project
Fix some C++ error recovery problems in init declarator parsing
that I noticed working on other things. Instead of emitting: t2.cc:1:8: error: use of undeclared identifier 'g' int x(*g); ^ t2.cc:1:10: error: expected ')' int x(*g); ^ t2.cc:1:6: note: to match this '(' int x(*g); ^ We now only emit: t2.cc:1:7: warning: type specifier missing, defaults to 'int' int x(*g); ^ Note that the example in SemaCXX/nested-name-spec.cpp:f4 is still not great, we now produce both of: void f4(undef::C); // expected-error {{use of undeclared identifier 'undef'}} \ expected-error {{variable has incomplete type 'void'}} The second diagnostic should be silenced by something getting marked invalid. I don't plan to fix this though. llvm-svn: 68919
This commit is contained in:
parent
090d34c692
commit
869c6610c7
|
@ -380,15 +380,12 @@ ParseInitDeclaratorListAfterFirstDeclarator(Declarator &D) {
|
|||
ExprVector Exprs(Actions);
|
||||
CommaLocsTy CommaLocs;
|
||||
|
||||
bool InvalidExpr = false;
|
||||
if (ParseExpressionList(Exprs, CommaLocs)) {
|
||||
SkipUntil(tok::r_paren);
|
||||
InvalidExpr = true;
|
||||
}
|
||||
} else {
|
||||
// Match the ')'.
|
||||
SourceLocation RParenLoc = MatchRHSPunctuation(tok::r_paren, LParenLoc);
|
||||
|
||||
if (!InvalidExpr) {
|
||||
assert(!Exprs.empty() && Exprs.size()-1 == CommaLocs.size() &&
|
||||
"Unexpected number of commas!");
|
||||
Actions.AddCXXDirectInitializerToDecl(ThisDecl, LParenLoc,
|
||||
|
|
|
@ -0,0 +1,3 @@
|
|||
// RUN: clang-cc -verify -fsyntax-only %s
|
||||
|
||||
int x(*g); // expected-error {{use of undeclared identifier 'g'}}
|
|
@ -93,7 +93,8 @@ void f3() {
|
|||
}
|
||||
|
||||
// make sure the following doesn't hit any asserts
|
||||
void f4(undef::C); // expected-error {{use of undeclared identifier 'undef'}} // expected-error {{expected ')'}} expected-note {{to match this '('}} // expected-error {{variable has incomplete type 'void'}}
|
||||
void f4(undef::C); // expected-error {{use of undeclared identifier 'undef'}} \
|
||||
expected-error {{variable has incomplete type 'void'}}
|
||||
|
||||
typedef void C2::f5(int); // expected-error{{typedef declarator cannot be qualified}}
|
||||
|
||||
|
|
Loading…
Reference in New Issue