From 1a32a61ad4aac06949f8750930eb353f72c59759 Mon Sep 17 00:00:00 2001 From: Daniel Jasper Date: Wed, 20 Mar 2013 15:12:38 +0000 Subject: [PATCH] Fix infinite-loop in unwrapped line parser. Discovered when accidentally formatting a python file :-). llvm-svn: 177527 --- clang/lib/Format/UnwrappedLineParser.cpp | 2 +- clang/unittests/Format/FormatTest.cpp | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/clang/lib/Format/UnwrappedLineParser.cpp b/clang/lib/Format/UnwrappedLineParser.cpp index 2ca4462..a01344c 100644 --- a/clang/lib/Format/UnwrappedLineParser.cpp +++ b/clang/lib/Format/UnwrappedLineParser.cpp @@ -684,7 +684,7 @@ void UnwrappedLineParser::parseRecord() { // (this would still leave us with an ambiguity between template function // and class declarations). if (FormatTok.Tok.is(tok::colon) || FormatTok.Tok.is(tok::less)) { - while (FormatTok.Tok.isNot(tok::l_brace)) { + while (!eof() && FormatTok.Tok.isNot(tok::l_brace)) { if (FormatTok.Tok.is(tok::semi)) return; nextToken(); diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 40f0953..2a3d66d 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -2544,6 +2544,9 @@ TEST_F(FormatTest, UnderstandContextOfRecordTypeKeywords) { " class X x;\n" "else\n" " f();\n"); + + // This is simply incomplete. Formatting is not important, but must not crash. + verifyFormat("class A:"); } TEST_F(FormatTest, DoNotInterfereWithErrorAndWarning) { -- 2.7.4