Fix a couple of suboptimalities in error recovery.
1. In the top level of ParseStatementOrDeclaration, don't eat a } if we
just parsed a statement if it list there. Also, don't even bother
emitting an error about a missing semicolon if the statement had a
bug (an rbrace is fine).
2. In do/while parsing, don't require a 'while' to be present if the do
body didn't parse.
This allows us to generate a clean diagnostic for this code:
t.c:1:22: error: expected expression
void foo (void) { do . while (0); }
^
Thanks to Neil for pointing this out.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@59256 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/test/Parser/statements.c b/test/Parser/statements.c
index db2ec62..26b2662 100644
--- a/test/Parser/statements.c
+++ b/test/Parser/statements.c
@@ -47,3 +47,10 @@
if (0); // expected-warning {{if statement has empty body}}
}
+
+void test6(void) {
+ do
+ . // expected-error {{expected expression}}
+ while (0);
+}
+