MyDeveloperDay created this revision. MyDeveloperDay added reviewers: HazardyKnusperkeks, curdeius, owenpan. MyDeveloperDay added projects: clang, clang-format. MyDeveloperDay requested review of this revision.
https://github.com/llvm/llvm-project/issues/27740 Ensure #define _u(str) u#str #define _u(str) u8#str #define _u(str) U#str behave the same as #define _u(str) L#str when formatted ensure clang-format follows the conventions for `L` `u` `U` `u8` https://docs.microsoft.com/en-us/cpp/cpp/string-and-character-literals-cpp?redirectedfrom=MSDN&view=msvc-170 Fixes 27740 Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D115938 Files: clang/lib/Format/TokenAnnotator.cpp clang/unittests/Format/FormatTest.cpp Index: clang/unittests/Format/FormatTest.cpp =================================================================== --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -4342,6 +4342,9 @@ TEST_F(FormatTest, HashInMacroDefinition) { EXPECT_EQ("#define A(c) L#c", format("#define A(c) L#c", getLLVMStyle())); + EXPECT_EQ("#define A(c) u#c", format("#define A(c) u#c", getLLVMStyle())); + EXPECT_EQ("#define A(c) U#c", format("#define A(c) U#c", getLLVMStyle())); + EXPECT_EQ("#define A(c) u8#c", format("#define A(c) u8#c", getLLVMStyle())); verifyFormat("#define A \\\n b #c;", getLLVMStyleWithColumns(11)); verifyFormat("#define A \\\n" " { \\\n" Index: clang/lib/Format/TokenAnnotator.cpp =================================================================== --- clang/lib/Format/TokenAnnotator.cpp +++ clang/lib/Format/TokenAnnotator.cpp @@ -3225,7 +3225,10 @@ return false; if (Left.is(tok::period) || Right.is(tok::period)) return false; - if (Right.is(tok::hash) && Left.is(tok::identifier) && Left.TokenText == "L") + // u#str + if (Right.is(tok::hash) && Left.is(tok::identifier) && + (Left.TokenText == "L" || Left.TokenText == "u" || + Left.TokenText == "U" || Left.TokenText == "u8")) return false; if (Left.is(TT_TemplateCloser) && Left.MatchingParen && Left.MatchingParen->Previous &&
Index: clang/unittests/Format/FormatTest.cpp =================================================================== --- clang/unittests/Format/FormatTest.cpp +++ clang/unittests/Format/FormatTest.cpp @@ -4342,6 +4342,9 @@ TEST_F(FormatTest, HashInMacroDefinition) { EXPECT_EQ("#define A(c) L#c", format("#define A(c) L#c", getLLVMStyle())); + EXPECT_EQ("#define A(c) u#c", format("#define A(c) u#c", getLLVMStyle())); + EXPECT_EQ("#define A(c) U#c", format("#define A(c) U#c", getLLVMStyle())); + EXPECT_EQ("#define A(c) u8#c", format("#define A(c) u8#c", getLLVMStyle())); verifyFormat("#define A \\\n b #c;", getLLVMStyleWithColumns(11)); verifyFormat("#define A \\\n" " { \\\n" Index: clang/lib/Format/TokenAnnotator.cpp =================================================================== --- clang/lib/Format/TokenAnnotator.cpp +++ clang/lib/Format/TokenAnnotator.cpp @@ -3225,7 +3225,10 @@ return false; if (Left.is(tok::period) || Right.is(tok::period)) return false; - if (Right.is(tok::hash) && Left.is(tok::identifier) && Left.TokenText == "L") + // u#str + if (Right.is(tok::hash) && Left.is(tok::identifier) && + (Left.TokenText == "L" || Left.TokenText == "u" || + Left.TokenText == "U" || Left.TokenText == "u8")) return false; if (Left.is(TT_TemplateCloser) && Left.MatchingParen && Left.MatchingParen->Previous &&
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits