diff options
-rw-r--r-- | lib/Parse/ParseExpr.cpp | 2 | ||||
-rw-r--r-- | test/Parser/recovery-3.c | 9 |
2 files changed, 10 insertions, 1 deletions
diff --git a/lib/Parse/ParseExpr.cpp b/lib/Parse/ParseExpr.cpp index 29a2429bee..9eccd06da1 100644 --- a/lib/Parse/ParseExpr.cpp +++ b/lib/Parse/ParseExpr.cpp @@ -742,7 +742,7 @@ Parser::ExprResult Parser::ParseBuiltinPrimaryExpression() { ExprResult Expr = ParseAssignmentExpression(); if (Expr.isInvalid) { SkipUntil(tok::r_paren); - return Res; + return ExprResult(true); } if (ExpectAndConsume(tok::comma, diag::err_expected_comma, "",tok::r_paren)) diff --git a/test/Parser/recovery-3.c b/test/Parser/recovery-3.c new file mode 100644 index 0000000000..40cf8cd709 --- /dev/null +++ b/test/Parser/recovery-3.c @@ -0,0 +1,9 @@ +// RUN: clang -fsyntax-only -verify -pedantic %s + +// Testcase derived from PR2692 +static char *f (char * (*g) (char **, int), char **p, ...) { + char *s; + va_list v; // expected-error {{identifier}} + s = g (p, __builtin_va_arg(v, int)); // expected-error {{identifier}} expected-warning {{extension}} +} + |