Index: clang/lib/Format/UnwrappedLineParser.h =================================================================== --- clang/lib/Format/UnwrappedLineParser.h +++ clang/lib/Format/UnwrappedLineParser.h @@ -134,6 +134,7 @@ bool tryToParseLambdaIntroducer(); bool tryToParsePropertyAccessor(); void tryToParseJSFunction(); + bool tryToParseAttribute(); void addUnwrappedLine(); bool eof() const; // LevelDifference is the difference of levels after and before the current Index: clang/lib/Format/UnwrappedLineParser.cpp =================================================================== --- clang/lib/Format/UnwrappedLineParser.cpp +++ clang/lib/Format/UnwrappedLineParser.cpp @@ -1962,7 +1962,7 @@ if (FormatTok->Tok.is(tok::l_paren)) parseParens(); // handle [[likely]] / [[unlikely]] - if (FormatTok->is(tok::l_square)) + if (FormatTok->is(tok::l_square) && tryToParseAttribute()) parseSquare(); bool NeedsUnwrappedLine = false; if (FormatTok->Tok.is(tok::l_brace)) { @@ -1981,7 +1981,7 @@ if (FormatTok->Tok.is(tok::kw_else)) { nextToken(); // handle [[likely]] / [[unlikely]] - if (FormatTok->is(tok::l_square)) + if (FormatTok->Tok.is(tok::l_square) && tryToParseAttribute()) parseSquare(); if (FormatTok->Tok.is(tok::l_brace)) { CompoundStatementIndenter Indenter(this, Style, Line->Level); @@ -2343,6 +2343,18 @@ // "} n, m;" will end up in one unwrapped line. } +// look to see if we have [[ by looking ahead if +// its not then rewind to the original position +bool UnwrappedLineParser::tryToParseAttribute() { + unsigned StoredPosition = Tokens->getPosition(); + FormatToken *Tok = Tokens->getNextToken(); + FormatTok = Tokens->setPosition(StoredPosition); + if (Tok->is(tok::l_square)) { + return true; + } + return false; +} + void UnwrappedLineParser::parseJavaEnumBody() { // Determine whether the enum is simple, i.e. does not have a semicolon or // constants with class bodies. Simple enums can be formatted like braced Index: clang/unittests/Format/FormatTestObjC.cpp =================================================================== --- clang/unittests/Format/FormatTestObjC.cpp +++ clang/unittests/Format/FormatTestObjC.cpp @@ -1434,6 +1434,18 @@ " }]"); } +TEST_F(FormatTestObjC, IfNotUnlikely) { + Style = getGoogleStyle(FormatStyle::LK_ObjC); + Style.ObjCBreakBeforeNestedBlockParam = false; + + verifyFormat("if (argc < 5) [obj func:arg];"); + + verifyFormat("if (argc < 5)\n" + " [obj func:arg];\n" + "else\n" + " [obj func:arg2];"); +} + } // end namespace } // end namespace format } // end namespace clang