Interesting. This seems hard to do by accident, but there are very few 
circumstances I can think of where you'd do it on purpose, so...

+    // Keep track of whether every enum element is the same value.
+    if (AllElementsEqual && i > 0) {
+      if (InitVal.getBitWidth() > LastVal.getBitWidth())
+        AllElementsEqual = InitVal == LastVal.extend(InitVal.getBitWidth());
+      else if (InitVal.getBitWidth() < LastVal.getBitWidth())
+        AllElementsEqual = InitVal.extend(LastVal.getBitWidth()) == LastVal;
+      else
+        AllElementsEqual = InitVal == LastVal;
+    }

This will crash if the two values have the same bit width, but different 
signedness. I'm not sure if you can do that with enums, but...

(This is the sort of problem that APSIntType in the static analyzer Core 
library is supposed to make simpler.)

Also, as is right now the two tests can be embedded in the same file, using "-x 
c++". However, if we want to test this with C++11's fixed-underlying-type 
enums, that's a case for keeping separate files.

Jordy


On May 15, 2012, at 19:10, Richard Trieu wrote:

> Add -Wunique-enum which will warn on enums with at least 2 elements such that 
> all elements are the same value.  This will catch enums such as:
> 
> enum A {
>   FIRST = 1,
>   SECOND = 1
> };
> <unique-enum.patch>_______________________________________________
> cfe-commits mailing list
> [email protected]
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits


_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to