diff options
| author | Chris Lattner <sabre@nondot.org> | 2009-04-12 22:23:27 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2009-04-12 22:23:27 +0000 |
| commit | 869c6610c78c2af8ac407a2eed037f68c990be70 (patch) | |
| tree | f05c3559798de8db706e335a75b57b24230144f9 /clang/lib/Parse/ParseDecl.cpp | |
| parent | 090d34c692824656017562ebb781a889ea281eac (diff) | |
| download | bcm5719-llvm-869c6610c78c2af8ac407a2eed037f68c990be70.tar.gz bcm5719-llvm-869c6610c78c2af8ac407a2eed037f68c990be70.zip | |
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
Diffstat (limited to 'clang/lib/Parse/ParseDecl.cpp')
| -rw-r--r-- | clang/lib/Parse/ParseDecl.cpp | 9 |
1 files changed, 3 insertions, 6 deletions
diff --git a/clang/lib/Parse/ParseDecl.cpp b/clang/lib/Parse/ParseDecl.cpp index 5b8963f892c..da3ee1df7c5 100644 --- a/clang/lib/Parse/ParseDecl.cpp +++ b/clang/lib/Parse/ParseDecl.cpp @@ -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; - } - // Match the ')'. - SourceLocation RParenLoc = MatchRHSPunctuation(tok::r_paren, LParenLoc); + } 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, |

