diff options
-rw-r--r-- | lib/Format/Format.cpp | 5 | ||||
-rw-r--r-- | lib/Format/UnwrappedLineParser.cpp | 4 | ||||
-rw-r--r-- | unittests/Format/FormatTest.cpp | 24 |
3 files changed, 26 insertions, 7 deletions
diff --git a/lib/Format/Format.cpp b/lib/Format/Format.cpp index 3bedc6a4cd..7f1131ca6f 100644 --- a/lib/Format/Format.cpp +++ b/lib/Format/Format.cpp @@ -371,8 +371,9 @@ private: if (Newlines == 0 && Offset != 0) Newlines = 1; unsigned Indent = Line.Level * 2; - if (Token.Tok.is(tok::kw_public) || Token.Tok.is(tok::kw_protected) || - Token.Tok.is(tok::kw_private)) + if ((Token.Tok.is(tok::kw_public) || Token.Tok.is(tok::kw_protected) || + Token.Tok.is(tok::kw_private)) && + static_cast<int>(Indent) + Style.AccessModifierOffset >= 0) Indent += Style.AccessModifierOffset; replaceWhitespace(Token, Newlines, Indent); return Indent; diff --git a/lib/Format/UnwrappedLineParser.cpp b/lib/Format/UnwrappedLineParser.cpp index a225f3b3e7..8545f336b8 100644 --- a/lib/Format/UnwrappedLineParser.cpp +++ b/lib/Format/UnwrappedLineParser.cpp @@ -311,7 +311,9 @@ void UnwrappedLineParser::parseSwitch() { void UnwrappedLineParser::parseAccessSpecifier() { nextToken(); - nextToken(); + // Otherwise, we don't know what it is, and we'd better keep the next token. + if (FormatTok.Tok.is(tok::colon)) + nextToken(); addUnwrappedLine(); } diff --git a/unittests/Format/FormatTest.cpp b/unittests/Format/FormatTest.cpp index d00da7ffee..79cefc4663 100644 --- a/unittests/Format/FormatTest.cpp +++ b/unittests/Format/FormatTest.cpp @@ -498,10 +498,26 @@ TEST_F(FormatTest, HandlesIncludeDirectives) { // Error recovery tests. //===----------------------------------------------------------------------===// -//TEST_F(FormatTest, IncorrectDerivedClass) { -// verifyFormat("public B {\n" -// "};"); -//} +TEST_F(FormatTest, IncorrectAccessSpecifier) { + verifyFormat("public:"); + verifyFormat("class A {\n" + "public\n" + " void f() {\n" + " }\n" + "};"); + verifyFormat("public\n" + "int qwerty;"); + verifyFormat("public\n" + "B {\n" + "};"); + verifyFormat("public\n" + "{\n" + "};"); + verifyFormat("public\n" + "B {\n" + " int x;\n" + "};"); +} TEST_F(FormatTest, IncorrectCodeUnbalancedBraces) { verifyFormat("{"); |