diff options
-rw-r--r-- | clang/lib/Parse/ParseExpr.cpp | 2 | ||||
-rw-r--r-- | clang/test/Parser/recovery-3.c | 9 |
2 files changed, 10 insertions, 1 deletions
diff --git a/clang/lib/Parse/ParseExpr.cpp b/clang/lib/Parse/ParseExpr.cpp index 29a2429bee8..9eccd06da14 100644 --- a/clang/lib/Parse/ParseExpr.cpp +++ b/clang/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/clang/test/Parser/recovery-3.c b/clang/test/Parser/recovery-3.c new file mode 100644 index 00000000000..40cf8cd709d --- /dev/null +++ b/clang/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}} +} + |