From: Alp Toker Date: Sun, 5 Jan 2014 04:17:27 +0000 (+0000) Subject: Tweak the parse recovery in r198540 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=726bbab9bdb868c332f8911fa6699261cba053e3;p=clang Tweak the parse recovery in r198540 Cover a hypothetical case when we might not have reached the final argument declaration for some reason during recovery, and split out for readability. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@198542 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Parse/Parser.cpp b/lib/Parse/Parser.cpp index f668c5a8bd..0caf152a06 100644 --- a/lib/Parse/Parser.cpp +++ b/lib/Parse/Parser.cpp @@ -1285,9 +1285,14 @@ void Parser::ParseKNRParamDeclarations(Declarator &D) { ParseDeclarator(ParmDeclarator); } - // Consume ';' or recover by skipping to the mandatory function body. - if (ExpectAndConsumeSemi(diag::err_expected_semi_declaration)) - SkipUntil(tok::l_brace, StopBeforeMatch); + // Consume ';' and continue parsing. + if (!ExpectAndConsumeSemi(diag::err_expected_semi_declaration)) + continue; + + // Otherwise recover by skipping to next semi or mandatory function body. + if (SkipUntil(tok::l_brace, StopAtSemi | StopBeforeMatch)) + break; + TryConsumeToken(tok::semi); } // The actions module must verify that all arguments were declared.