[cfe-commits] [Patch] -Wduplicate-enum which fixes PR6343

Richard Trieu rtrieu at google.com
Wed Jul 18 18:34:34 PDT 2012


A set could work for detecting the values, but both EnumConstantDecls are
needed for the diagnostic, not just the values.  Possibly a map from
APSInt->EnumConstantDecl* would work.  But either way, I would be dealing
with getting APSInts to play nice with each other.

On Wed, Jul 18, 2012 at 6:16 PM, Sean Silva <silvas at purdue.edu> wrote:

> Why not just keep a set containing all previously seen values? Then
> you can find duplicates with a linear scan.
>
> --Sean Silva
>
> On Wed, Jul 18, 2012 at 6:11 PM, Richard Trieu <rtrieu at google.com> wrote:
> > On Wed, Jul 18, 2012 at 5:41 PM, Ted Kremenek <kremenek at apple.com>
> wrote:
> >>
> >> Hi Richard,
> >>
> >> I think this checking is quadratic, n(n+1)/2.
> >
> > Yes it is.  It does perform a check between each enum in the worst case.
> >
> >>
> >>  This might be fairly expensive on a large set of enums.  Do you have
> any
> >> performance numbers?
> >
> > I haven't run any performance tests.  I will try running some when I get
> the
> > chance.
> >
> >>
> >>  I agree that it is a good checking, but the way it is implemented is
> >> likely to be noticeably slow on some (important) cases.
> >
> > How many elements in an enum would be in these important cases?
> >>
> >>
> >> Ted
> >>
> >> On Jul 18, 2012, at 4:46 PM, Richard Trieu <rtrieu at google.com> wrote:
> >>
> >> http://llvm.org/bugs/show_bug.cgi?id=6343
> >>
> >> Warn on enum elements that are assigned values already in use.  This is
> >> based on the misconception that elements not given a value will be
> given the
> >> next smallest, unused value.  Instead, elements are assigned 1 more
> than the
> >> previous value.  Some example code this warning will catch:
> >>
> >> enum { A, B, C, Aref = A, count };
> >> Both B and count will have value 1.
> >>
> >> enum { A, B, C, D = -1, E, F };
> >> A = E = 0
> >> B = F = 1
> >>
> >> This warning found one such issue in LLVM that was fixed in r160465.
> >> <duplicate-enum.patch>_______________________________________________
> >> cfe-commits mailing list
> >> cfe-commits at cs.uiuc.edu
> >> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
> >>
> >>
> >
> >
> > _______________________________________________
> > 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/20120718/277c1e5b/attachment.html>


More information about the cfe-commits mailing list