]> granicus.if.org Git - clang/commitdiff
Fix a recovery bug Fariborz and I noticed yesterday. We were producing:
authorChris Lattner <sabre@nondot.org>
Thu, 25 Oct 2007 17:27:01 +0000 (17:27 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 25 Oct 2007 17:27:01 +0000 (17:27 +0000)
method.c:4:3: error: use of undeclared identifier 'BADIDENT'
        &BADIDENT, 0
         ^
method.c:5:2: error: expected '}'
};
 ^
method.c:3:14: error: to match this '{'
struct S A = {
             ^

now we only produce:

method.c:4:3: error: use of undeclared identifier 'BADIDENT'
        &BADIDENT, 0
         ^

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43349 91177308-0d34-0410-b5e6-96231b3b80d8

Parse/ParseInit.cpp
test/Parser/recovery-1.c

index 63687408d720409067e88569c677a2c38554ed48..c4ecd26f1b898ccad38bcdeb35fec0dd804e58a2 100644 (file)
@@ -175,7 +175,7 @@ Parser::ExprResult Parser::ParseInitializer() {
     // If we couldn't parse the subelement, bail out.
     if (SubElt.isInvalid) {
       InitExprsOk = false;
-      SkipUntil(tok::r_brace);
+      SkipUntil(tok::r_brace, false, true);
       break;
     } else
       InitExprs.push_back(SubElt.Val);
index b37c88cba07d21abd8abfd9e87b321e352a3995a..b7270b572a9f9e97757054676b8b2d725948369a 100644 (file)
@@ -5,3 +5,12 @@ char ((((                       /* expected-error {{to match this '('}} */
 *X x ] ))));                    /* expected-error {{expected ')'}} */
 
 ;   // expected-warning {{ISO C does not allow an extra ';' outside of a function}}
+
+
+
+
+struct S { void *X, *Y; };
+
+struct S A = {
+       &BADIDENT, 0     /* expected-error {{use of undeclared identifier}} */
+};