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