[PATCH] D131314: [clang] format string checks for `InitListExpr`

Aaron Ballman via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Aug 9 12:52:36 PDT 2022


aaron.ballman added a comment.

In D131314#3710514 <https://reviews.llvm.org/D131314#3710514>, @inclyc wrote:

> In D131314#3710331 <https://reviews.llvm.org/D131314#3710331>, @aaron.ballman wrote:
>
>> In D131314#3707131 <https://reviews.llvm.org/D131314#3707131>, @inclyc wrote:
>>
>>> ping
>>
>> FWIW, we usually only ping a review that hasn't had any activity in a week or more (it's not uncommon for reviews to sit for a few days while people think about them or reviewers are busy on other stuff).
>>
>> I've not had the chance to do an in-depth review yet, but I have two thoughts I can share early on. I think you can simplify the patch a little bit by treating a string literal and an initializer list the same way (using an iterator to walk over the elements) instead of ginning up a fake `StringLiteral` AST node (that's a very heavy handed way to implement this). However, even with that simplification, I'm not certain the use cases for the diagnostic happen enough to warrant this large of a change in how we process format strings. I had encouraged such a diagnostic given the equivalence of the construct with string literals, but I was imagining that the support would be a few lines of code rather than anything substantial like this. Perhaps you can find a way to make the changes less invasive, but if not, I think we may want to hold off on this change until a user files an issue pointing out some real world code that would be easier to fix if they had such a diagnostic.
>
> Clang seems to depend class `FormatStringLiteral`  when performing format string checking, which has its `SourceLocation`, a wrapped pointer. With these information we can generate FixIt Hints directly on source codes. In previous version, we probably haven't even considered checking the format string evaluated from `InitListExpr` (just consider it is not a string literal). I've tried adding some ways to treat them as equals before, but it seems more invasive than this patch. Actually, I don't think any user would ever define a format string like `{'%', 'd', 0}` (That's exactly the reason I split format string checks in two patches). So maybe we should abandon this patch because there are no  enough benefits to apply this?

I think that might be the best course of action, though I'm really sorry to have asked you to do this work only to turn around and say "nevermind." I just don't see enough users writing their format strings that way for the amount of effort it takes to support diagnosing it.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D131314



More information about the cfe-commits mailing list