[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
Thu Oct 27 17:44:33 PDT 2011
Committed at r143168.
On Wed, Oct 26, 2011 at 9:04 PM, Ted Kremenek <kremenek at apple.com> wrote:
> Richard,
>
> Thanks for writing this. Overall this looks excellent. I agree with Eli's
> assessment; the only thing I had fault with was the stray comment.
>
> A bit of QOI: can you add a comment above EmitFormatDiagnostic, describing
> what it does, and *why* it is templated. It looks like a bit of magic to
> someone not familiar with the code, and a little prose will make it for more
> intelligible to someone glancing at the code.
>
> Overall looks great. Nice improvement.
>
> On Oct 25, 2011, at 1:12 PM, Eli Friedman wrote:
>
> > On Tue, Oct 25, 2011 at 12:46 PM, Richard Trieu <rtrieu at google.com>
> wrote:
> >>
> >>
> >> 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.
> >
> > I was sort of hoping someone more familiar with this code would take a
> > look... but a quick review:
> >
> > + FixItHint FixIt) {
> > + //if (StringLiteralFinder(S, StringExpr, ArgumentExpr).HasString())
> > + if (inFunctionCall)
> >
> > Forgot to get rid of that line?
> >
> > Other than that, I don't see any issues. Thanks for writing
> > high-quality testcases.
> >
> > -Eli
> >
> > _______________________________________________
> > cfe-commits mailing list
> > cfe-commits at cs.uiuc.edu
> > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20111027/d8bd21bd/attachment.html>
More information about the cfe-commits
mailing list