diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index 9dfe1d3e18f4be..6fc3a4d5d18ae3 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -3242,7 +3242,13 @@ bool TokenAnnotator::spaceRequiredBetween(const AnnotatedLine &Line, 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, U#str, L#str, u8#str + // uR#str, UR#str, LR#str, u8R#str + if (Right.is(tok::hash) && Left.is(tok::identifier) && + (Left.TokenText == "L" || Left.TokenText == "u" || + Left.TokenText == "U" || Left.TokenText == "u8" || + Left.TokenText == "LR" || Left.TokenText == "uR" || + Left.TokenText == "UR" || Left.TokenText == "u8R")) return false; if (Left.is(TT_TemplateCloser) && Left.MatchingParen && Left.MatchingParen->Previous && diff --git a/clang/unittests/Format/FormatTest.cpp b/clang/unittests/Format/FormatTest.cpp index 2eb10609646a65..2b9a72e3741447 100644 --- a/clang/unittests/Format/FormatTest.cpp +++ b/clang/unittests/Format/FormatTest.cpp @@ -4396,6 +4396,13 @@ TEST_F(FormatTest, MacroDefinitionInsideStatement) { 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())); + EXPECT_EQ("#define A(c) LR#c", format("#define A(c) LR#c", getLLVMStyle())); + EXPECT_EQ("#define A(c) uR#c", format("#define A(c) uR#c", getLLVMStyle())); + EXPECT_EQ("#define A(c) UR#c", format("#define A(c) UR#c", getLLVMStyle())); + EXPECT_EQ("#define A(c) u8R#c", format("#define A(c) u8R#c", getLLVMStyle())); verifyFormat("#define A \\\n b #c;", getLLVMStyleWithColumns(11)); verifyFormat("#define A \\\n" " { \\\n"