galenelias created this revision. Herald added projects: All, clang, clang-format. Herald added a subscriber: cfe-commits. Herald added reviewers: rymiel, HazardyKnusperkeks, owenpan, MyDeveloperDay. galenelias requested review of this revision.
This fixes https://github.com/llvm/llvm-project/issues/64134 which is a regression from https://reviews.llvm.org/D150403 where I added logic to distinguish adjacent braces blocks between being braced initializers or adjacent scopes by looking at the token before the first opening brace to see if it is part of a class initializer list. However, this logic fails to match initialization of a templated base class initializer, because in that scenario the 'identifier' actually ends in a `>`, so isn't detected. I am extending the logic to just also detect `>` explicitly to be recognized as the braced initializer syntax. Hopefully there aren't many more holes in the detection logic here. https://reviews.llvm.org/D156705 Files: clang/lib/Format/UnwrappedLineParser.cpp clang/unittests/Format/FormatTest.cpp Index: clang/unittests/Format/FormatTest.cpp =================================================================== --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -13458,6 +13458,7 @@ verifyFormat( "class A {\n" " A() : a{} {}\n" + " A() : Base<int>{} {}\n" " A(int b) : b(b) {}\n" " A(int a, int b) : a(a), bs{{bs...}} { f(); }\n" " int a, b;\n" Index: clang/lib/Format/UnwrappedLineParser.cpp =================================================================== --- clang/lib/Format/UnwrappedLineParser.cpp +++ clang/lib/Format/UnwrappedLineParser.cpp @@ -581,7 +581,8 @@ ProbablyBracedList = ProbablyBracedList || (NextTok->is(tok::l_brace) && LBraceStack.back().PrevTok && - LBraceStack.back().PrevTok->is(tok::identifier)); + LBraceStack.back().PrevTok->isOneOf(tok::identifier, + tok::greater)); ProbablyBracedList = ProbablyBracedList ||
Index: clang/unittests/Format/FormatTest.cpp =================================================================== --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -13458,6 +13458,7 @@ verifyFormat( "class A {\n" " A() : a{} {}\n" + " A() : Base<int>{} {}\n" " A(int b) : b(b) {}\n" " A(int a, int b) : a(a), bs{{bs...}} { f(); }\n" " int a, b;\n" Index: clang/lib/Format/UnwrappedLineParser.cpp =================================================================== --- clang/lib/Format/UnwrappedLineParser.cpp +++ clang/lib/Format/UnwrappedLineParser.cpp @@ -581,7 +581,8 @@ ProbablyBracedList = ProbablyBracedList || (NextTok->is(tok::l_brace) && LBraceStack.back().PrevTok && - LBraceStack.back().PrevTok->is(tok::identifier)); + LBraceStack.back().PrevTok->isOneOf(tok::identifier, + tok::greater)); ProbablyBracedList = ProbablyBracedList ||
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits