summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--clang/lib/Parse/ParseExpr.cpp2
-rw-r--r--clang/test/Parser/recovery-3.c9
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}}
+}
+
OpenPOWER on IntegriCloud