[cfe-commits] Patch: PR9751: -Wformat warnings will point to the callsite and give a note if the format string is elsewhere.
Richard Trieu
rtrieu at google.com
Tue Oct 25 12:46:42 PDT 2011
On Thu, Oct 13, 2011 at 5:18 PM, Richard Trieu <rtrieu at google.com> wrote:
> On Thu, Oct 13, 2011 at 3:25 PM, Richard Trieu <rtrieu at google.com> wrote:
>
>> On Thu, Oct 13, 2011 at 2:53 PM, Eli Friedman <eli.friedman at gmail.com>wrote:
>>
>>> On Thu, Oct 13, 2011 at 2:38 PM, Richard Trieu <rtrieu at google.com>
>>> wrote:
>>> > http://llvm.org/bugs/show_bug.cgi?id=9751
>>> > -Wformat warnings will point to the format string, but no message at
>>> the
>>> > call site. This patch will move the warning to always point at the
>>> call
>>> > site. If the format string is part of the function call, one warning
>>> will
>>> > show. If the format string is defined elsewhere, a warning at the call
>>> site
>>> > plus a note where the format string is defined.
>>> > Also, if a note is present, the fix-it would be moved to the note so
>>> they
>>> > won't be applied with -fixit. If the format string was used in
>>> multiple
>>> > places, fixits may cause problems in other places.
>>> > printf("%d %d", 1);
>>> > warning: more '%' conversions than data arguments [-Wformat]
>>> > printf("%d %d", 1);
>>> > ~^
>>> > const char kFormat[] = "%d %d";
>>> > printf(kFormat, 1);
>>> > test2.c:8:8: warning: more '%' conversions than data arguments
>>> [-Wformat]
>>> > printf(kFormat, 1);
>>> > ^~~~~~~
>>> > test2.c:7:29: note: format string is defined here
>>> > const char kFormat[] = "%d %d";
>>> > ~^
>>> > Patch attached an available at http://codereview.appspot.com/5277043/
>>>
>>> +namespace {
>>> + class StringLiteralFinder
>>> + : public ConstStmtVisitor<StringLiteralFinder> {
>>> + Sema& S;
>>> + const StringLiteral *StringExpr;
>>> + bool StringFound;
>>> + public:
>>> [...]
>>>
>>> Why is StringLiteralFinder necessary? The caller should know how it
>>> found the string literal...
>>>
>>> That information isn't currently preserved through the diagnostics. The
>> StringLiteralFinder is necessary to determine this after the fact. I can go
>> look again and see if I can propagate that bit of info through the code.
>>
>>
> Turns out, it was easier to to pass around a bool with this info than
> I originally thought. New patch attached.
>
Ping.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20111025/44f72189/attachment.html>
More information about the cfe-commits
mailing list