diff --git a/clang/lib/Basic/CharInfo.cpp b/clang/lib/Basic/CharInfo.cpp --- a/clang/lib/Basic/CharInfo.cpp +++ b/clang/lib/Basic/CharInfo.cpp @@ -12,6 +12,7 @@ // Statically initialize CharInfo table based on ASCII character set // Reference: FreeBSD 7.2 /usr/share/misc/ascii +// clang-format off const uint16_t clang::charinfo::InfoTable[256] = { // 0 NUL 1 SOH 2 STX 3 ETX // 4 EOT 5 ENQ 6 ACK 7 BEL @@ -19,8 +20,8 @@ 0 , 0 , 0 , 0 , // 8 BS 9 HT 10 NL 11 VT //12 NP 13 CR 14 SO 15 SI - 0 , CHAR_HORZ_WS, CHAR_VERT_WS, CHAR_HORZ_WS, - CHAR_HORZ_WS, CHAR_VERT_WS, 0 , 0 , + 0 , CHAR_HORZ_WS, CHAR_VERT_WS, CHAR_VERT_WS, + CHAR_VERT_WS, CHAR_VERT_WS, 0 , 0 , //16 DLE 17 DC1 18 DC2 19 DC3 //20 DC4 21 NAK 22 SYN 23 ETB 0 , 0 , 0 , 0 , diff --git a/clang/unittests/Basic/CharInfoTest.cpp b/clang/unittests/Basic/CharInfoTest.cpp --- a/clang/unittests/Basic/CharInfoTest.cpp +++ b/clang/unittests/Basic/CharInfoTest.cpp @@ -17,8 +17,8 @@ using namespace charinfo; EXPECT_EQ((unsigned)CHAR_SPACE, InfoTable[(unsigned)' ']); EXPECT_EQ((unsigned)CHAR_HORZ_WS, InfoTable[(unsigned)'\t']); - EXPECT_EQ((unsigned)CHAR_HORZ_WS, InfoTable[(unsigned)'\f']); // ?? - EXPECT_EQ((unsigned)CHAR_HORZ_WS, InfoTable[(unsigned)'\v']); // ?? + EXPECT_EQ((unsigned)CHAR_VERT_WS, InfoTable[(unsigned)'\f']); + EXPECT_EQ((unsigned)CHAR_VERT_WS, InfoTable[(unsigned)'\v']); EXPECT_EQ((unsigned)CHAR_VERT_WS, InfoTable[(unsigned)'\n']); EXPECT_EQ((unsigned)CHAR_VERT_WS, InfoTable[(unsigned)'\r']); EXPECT_EQ((unsigned)CHAR_UNDER, InfoTable[(unsigned)'_']); @@ -101,8 +101,6 @@ EXPECT_TRUE(isHorizontalWhitespace(' ')); EXPECT_TRUE(isHorizontalWhitespace('\t')); - EXPECT_TRUE(isHorizontalWhitespace('\f')); // ?? - EXPECT_TRUE(isHorizontalWhitespace('\v')); // ?? EXPECT_FALSE(isHorizontalWhitespace('\n')); EXPECT_FALSE(isHorizontalWhitespace('\r')); @@ -123,9 +121,9 @@ EXPECT_FALSE(isVerticalWhitespace(' ')); EXPECT_FALSE(isVerticalWhitespace('\t')); - EXPECT_FALSE(isVerticalWhitespace('\f')); // ?? - EXPECT_FALSE(isVerticalWhitespace('\v')); // ?? + EXPECT_TRUE(isVerticalWhitespace('\f')); // ?? + EXPECT_TRUE(isVerticalWhitespace('\v')); // ?? EXPECT_TRUE(isVerticalWhitespace('\n')); EXPECT_TRUE(isVerticalWhitespace('\r')); diff --git a/clang/unittests/Lex/DependencyDirectivesSourceMinimizerTest.cpp b/clang/unittests/Lex/DependencyDirectivesSourceMinimizerTest.cpp --- a/clang/unittests/Lex/DependencyDirectivesSourceMinimizerTest.cpp +++ b/clang/unittests/Lex/DependencyDirectivesSourceMinimizerTest.cpp @@ -162,18 +162,6 @@ ASSERT_FALSE(minimizeSourceToDependencyDirectives( "#define MACRO(\t)\tcon \t tent\t", Out)); EXPECT_STREQ("#define MACRO() con \t tent\n", Out.data()); - - ASSERT_FALSE(minimizeSourceToDependencyDirectives( - "#define MACRO(\f)\fcon \f tent\f", Out)); - EXPECT_STREQ("#define MACRO() con \f tent\n", Out.data()); - - ASSERT_FALSE(minimizeSourceToDependencyDirectives( - "#define MACRO(\v)\vcon \v tent\v", Out)); - EXPECT_STREQ("#define MACRO() con \v tent\n", Out.data()); - - ASSERT_FALSE(minimizeSourceToDependencyDirectives( - "#define MACRO \t\v\f\v\t con\f\t\vtent\v\f \v", Out)); - EXPECT_STREQ("#define MACRO con\f\t\vtent\n", Out.data()); } TEST(MinimizeSourceToDependencyDirectivesTest, DefineMultilineArgs) { @@ -194,6 +182,29 @@ EXPECT_STREQ("#define MACRO(a,b) call((a), (b))\n", Out.data()); } +TEST(MinimizeSourceToDependencyDirectivesTest, + DefineMultilineArgsVerticalWhiteSpaces) { + SmallVector Out; + + ASSERT_FALSE( + minimizeSourceToDependencyDirectives("#define MACRO(a \\\f" + " )", + Out)); + EXPECT_STREQ("#define MACRO(a)\n", Out.data()); + + ASSERT_FALSE( + minimizeSourceToDependencyDirectives("#define MACRO(a \\\v" + " )", + Out)); + EXPECT_STREQ("#define MACRO(a)\n", Out.data()); + + ASSERT_FALSE(minimizeSourceToDependencyDirectives( + "#define MACRO(a \\\f\\\v\\\v\\\f" + " )", + Out)); + EXPECT_STREQ("#define MACRO(a)\n", Out.data()); +} + TEST(MinimizeSourceToDependencyDirectivesTest, DefineMultilineArgsCarriageReturn) { SmallVector Out; diff --git a/clang/unittests/Lex/LexerTest.cpp b/clang/unittests/Lex/LexerTest.cpp --- a/clang/unittests/Lex/LexerTest.cpp +++ b/clang/unittests/Lex/LexerTest.cpp @@ -493,10 +493,10 @@ EXPECT_TRUE(hasNewLineEscaped("\\\r")); EXPECT_TRUE(hasNewLineEscaped("\\\n")); + EXPECT_TRUE(hasNewLineEscaped("\\\v")); EXPECT_TRUE(hasNewLineEscaped("\\\r\n")); EXPECT_TRUE(hasNewLineEscaped("\\\n\r")); - EXPECT_TRUE(hasNewLineEscaped("\\ \t\v\f\r")); - EXPECT_TRUE(hasNewLineEscaped("\\ \t\v\f\r\n")); + EXPECT_TRUE(hasNewLineEscaped("\\ \t\r\n")); EXPECT_FALSE(hasNewLineEscaped("\\\r\r")); EXPECT_FALSE(hasNewLineEscaped("\\\r\r\n"));