[PATCH] D85545: [Diagnostics] Diagnose missing comma in string array initialization

Arthur Eubanks via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Aug 11 11:52:37 PDT 2020


aeubanks added a comment.

In D85545#2211070 <https://reviews.llvm.org/D85545#2211070>, @xbolva00 wrote:

> I check if all elements of init list are strings, so this is not
> exactly true "struct checker" (I have no such info in that part of
> code..) but I consider it good enough. Your test case is based on real
> code? Does not seem so - well sure, we could construct many examples
> where warning fires uselessly but my focus is on real world false
> positive cases :)
>
> ut 11. 8. 2020 o 19:55 Arthur Eubanks via Phabricator
> <reviews at reviews.llvm.org> napĂ­sal(a):
>
>> aeubanks added a comment.
>>
>> Actually sorry, it does still seem like there are false positives on structs. Reduced:
>>
>>   $ cat /tmp/a.cpp
>>   
>>   struct A {
>>     const char* a;
>>     const char* b;
>>     const char* c;
>>   };
>>   
>>   static constexpr A foo2 = A{"",
>>                               ""
>>                               "",
>>                               ""};
>>   
>>   $ ~/repos/llvm-project/build_cmake/bin/clang /tmp/a.cpp -o /dev/null -c -Wstring-concatenation
>>   /tmp/a.cpp:10:29: warning: suspicious concatenation of string literals in an array initialization; did you mean to separate the elements with a comma? [-Wstring-concatenation]
>>                               "",
>>                               ^
>>   /tmp/a.cpp:9:29: note: place parentheses around the string literal to silence warning
>>                               ""
>>                               ^
>>   1 warning generated.
>>
>> Repository:
>>
>>   rG LLVM Github Monorepo
>>
>> CHANGES SINCE LAST ACTION
>>
>>   https://reviews.llvm.org/D85545/new/
>>
>> https://reviews.llvm.org/D85545

Yup it's reduced from real world code, same link as before: https://source.chromium.org/chromium/chromium/src/+/master:third_party/dawn/src/dawn_native/Toggles.cpp;drc=80f927d763211ea8e6a6377f86282809c86dc107;l=32.
Clearly if there are 3 strings in the struct and the initializer has three strings, then the warning shouldn't apply.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D85545/new/

https://reviews.llvm.org/D85545



More information about the cfe-commits mailing list