New issue
Advanced search Search tips

Issue 650391 link

Starred by 1 user

Issue metadata

Status: WontFix
Owner: ----
Closed: Sep 2016
EstimatedDays: ----
NextAction: ----
OS: Linux
Pri: 3
Type: Bug



Sign in to add a comment

Storage for http://llvm.org/PR30530

Project Member Reported by thakis@chromium.org, Sep 26 2016

Issue description

We have various tests in blink that test processing of emojis (or other non-BMP unicode chars). Here's one of the tests as processed by clang-format, compared to the same test with each emoji replaced with an ansi char:

thakis@thakis:~/src/chrome/src$ cat test.cc
TEST_F(SymbolsIteratorTest, AllEmojiZWSSequences)
{
    CHECK_RUNS({ { "abcdefghijklmnopqrstuvwxyzabcdefghij"
        "klmnopqrstuvxyzabcdefghijklmnopqrstuvwxyzabcdefghilklmnopqrstuvwx"
        "yzabcdefghijklmnopqrstuvwxyzabcdef",
        FontFallbackPriority::EmojiEmoji } });
}

TEST_F(SymbolsIteratorTest, AllEmojiZWSSequences)
{
    CHECK_RUNS({ { "๐Ÿ’๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿ’‘๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘จ๐Ÿ‘จโ€โค๏ธโ€๐Ÿ‘จ๐Ÿ‘ฉโ€โค๏ธ"
        "โ€๐Ÿ‘ฉ๐Ÿ‘ช๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ง๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ง"
        "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ง๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง๐Ÿ‘โ€๐Ÿ—จ",
        FontFallbackPriority::EmojiEmoji } });
}
thakis@thakis:~/src/chrome/src$ buildtools/linux64/clang-format test.cc
TEST_F(SymbolsIteratorTest, AllEmojiZWSSequences) {
  CHECK_RUNS(
      {{"abcdefghijklmnopqrstuvwxyzabcdefghij"
        "klmnopqrstuvxyzabcdefghijklmnopqrstuvwxyzabcdefghilklmnopqrstuvwx"
        "yzabcdefghijklmnopqrstuvwxyzabcdef",
        FontFallbackPriority::EmojiEmoji}});
}

TEST_F(SymbolsIteratorTest, AllEmojiZWSSequences) {
  CHECK_RUNS(
      {{"๐Ÿ’๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘ฉ๐Ÿ’‘๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ‘จ๐Ÿ‘จโ€โค๏ธ"
        "โ€๐Ÿ‘จ๐Ÿ‘ฉโ€โค๏ธ"
        "โ€๐Ÿ‘ฉ๐Ÿ‘ช๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง๐Ÿ‘จโ€๐Ÿ‘จโ€"
        "๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ง๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€"
        "๐Ÿ‘ง"
        "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ง๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆโ€๐Ÿ‘ฆ๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ง๐Ÿ‘โ€"
        "๐Ÿ—จ",
        FontFallbackPriority::EmojiEmoji}});
}


Note all the pointless linebreaks in the emoji version.


What's worse, if I iterate `clang-format -i test.cc`, then clang-format will move one single char from the end of the first string in its own line on every run, so that I'll eventually end up with:


TEST_F(SymbolsIteratorTest, AllEmojiZWSSequences) {
  CHECK_RUNS(
      {{"๐Ÿ’๐Ÿ‘ฉโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ๐Ÿ‘ฉโ€โค"
        "๏ธ"
        "โ€"
        "๐Ÿ’‹"
        "โ€"
        "๐Ÿ‘ฉ"
        "๐Ÿ’‘"
        "๐Ÿ‘ฉ"
        "โ€"
        "โค"
        "๏ธ"
        "โ€"
        "๐Ÿ‘จ"
        "๐Ÿ‘จ"
        "โ€"
        "โค"
        "๏ธ"
        "โ€๐Ÿ‘จ๐Ÿ‘ฉโ€โค๏ธ"
        "โ€๐Ÿ‘ฉ๐Ÿ‘ช๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€"
        "๐Ÿ‘ฆ"
        "๐Ÿ‘จ"
        "โ€"
        "๐Ÿ‘ฉ"
        "โ€"
        "๐Ÿ‘ฆ"
        "โ€"
        "๐Ÿ‘ฆ"
        "๐Ÿ‘จ"
        "โ€"
        "๐Ÿ‘ฉ"
        "โ€"
        "๐Ÿ‘ง"
        "โ€"
        "๐Ÿ‘ง"
        "๐Ÿ‘จ"
        "โ€"
        "๐Ÿ‘จ"
        "โ€"
        "๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ง๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘ฆโ€"
        "๐Ÿ‘ฆ"
        "๐Ÿ‘จ"
        "โ€"
        "๐Ÿ‘จ"
        "โ€"
        "๐Ÿ‘ง"
        "โ€"
        "๐Ÿ‘ง"
        "๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ฆ๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘ง๐Ÿ‘ฉโ€๐Ÿ‘ฉโ€๐Ÿ‘งโ€๐Ÿ‘ฆ๐Ÿ‘ฉโ€"
        "๐Ÿ‘ฉ"
        "โ€"
        "๐Ÿ‘ฆ"
        "โ€"
        "๐Ÿ‘ฆ"
        "๐Ÿ‘ฉ"
        "โ€"
        "๐Ÿ‘ฉ"
        "โ€"
        "๐Ÿ‘ง"
        "โ€"
        "๐Ÿ‘ง"
        "๐Ÿ‘"
        "โ€"
        "๐Ÿ—จ",
        FontFallbackPriority::EmojiEmoji}});
}

That seems to be the fixpoint, after that form clang-format stops changing the file.
 

Sign in to add a comment