curdeius created this revision. curdeius added reviewers: MyDeveloperDay, HazardyKnusperkeks, owenpan. curdeius requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
Fixes https://github.com/llvm/llvm-project/issues/52724. This is rather a workaround than a correct fix. To properly fix it, we'd need to find a better way to tell when not to decrease the StartOfTokenColumn. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D115803 Files: clang/lib/Format/WhitespaceManager.cpp clang/unittests/Format/FormatTest.cpp Index: clang/unittests/Format/FormatTest.cpp =================================================================== --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -13452,6 +13452,25 @@ "}", Tab)); + verifyFormat("void f() {\n" + "\treturn true ? aaaaaaaaaaaaaaaaaa\n" + "\t : bbbbbbbbbbbbbbbbbb\n" + "}", + Tab); + FormatStyle TabNoBreak = Tab; + TabNoBreak.BreakBeforeTernaryOperators = false; + verifyFormat("void f() {\n" + "\treturn true ? aaaaaaaaaaaaaaaaaa :\n" + "\t bbbbbbbbbbbbbbbbbb\n" + "}", + TabNoBreak); + verifyFormat("void f() {\n" + "\treturn true ?\n" + "\t aaaaaaaaaaaaaaaaaaaa :\n" + "\t bbbbbbbbbbbbbbbbbbbb\n" + "}", + TabNoBreak); + Tab.UseTab = FormatStyle::UT_Never; EXPECT_EQ("/*\n" " a\t\tcomment\n" Index: clang/lib/Format/WhitespaceManager.cpp =================================================================== --- clang/lib/Format/WhitespaceManager.cpp +++ clang/lib/Format/WhitespaceManager.cpp @@ -1282,9 +1282,12 @@ C.EscapedNewlineColumn); else appendNewlineText(ReplacementText, C.NewlinesBefore); + // FIXME: This assert should hold if we computed the column correctly. + // assert((int)C.StartOfTokenColumn >= C.Spaces); appendIndentText( ReplacementText, C.Tok->IndentLevel, std::max(0, C.Spaces), - C.StartOfTokenColumn - std::max(0, C.Spaces), C.IsAligned); + std::max((int)C.StartOfTokenColumn, C.Spaces) - std::max(0, C.Spaces), + C.IsAligned); ReplacementText.append(C.CurrentLinePrefix); storeReplacement(C.OriginalWhitespaceRange, ReplacementText); }
Index: clang/unittests/Format/FormatTest.cpp =================================================================== --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -13452,6 +13452,25 @@ "}", Tab)); + verifyFormat("void f() {\n" + "\treturn true ? aaaaaaaaaaaaaaaaaa\n" + "\t : bbbbbbbbbbbbbbbbbb\n" + "}", + Tab); + FormatStyle TabNoBreak = Tab; + TabNoBreak.BreakBeforeTernaryOperators = false; + verifyFormat("void f() {\n" + "\treturn true ? aaaaaaaaaaaaaaaaaa :\n" + "\t bbbbbbbbbbbbbbbbbb\n" + "}", + TabNoBreak); + verifyFormat("void f() {\n" + "\treturn true ?\n" + "\t aaaaaaaaaaaaaaaaaaaa :\n" + "\t bbbbbbbbbbbbbbbbbbbb\n" + "}", + TabNoBreak); + Tab.UseTab = FormatStyle::UT_Never; EXPECT_EQ("/*\n" " a\t\tcomment\n" Index: clang/lib/Format/WhitespaceManager.cpp =================================================================== --- clang/lib/Format/WhitespaceManager.cpp +++ clang/lib/Format/WhitespaceManager.cpp @@ -1282,9 +1282,12 @@ C.EscapedNewlineColumn); else appendNewlineText(ReplacementText, C.NewlinesBefore); + // FIXME: This assert should hold if we computed the column correctly. + // assert((int)C.StartOfTokenColumn >= C.Spaces); appendIndentText( ReplacementText, C.Tok->IndentLevel, std::max(0, C.Spaces), - C.StartOfTokenColumn - std::max(0, C.Spaces), C.IsAligned); + std::max((int)C.StartOfTokenColumn, C.Spaces) - std::max(0, C.Spaces), + C.IsAligned); ReplacementText.append(C.CurrentLinePrefix); storeReplacement(C.OriginalWhitespaceRange, ReplacementText); }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits