Revert "Properly consider the range of enum for range comparisons in C mode"
authorDavid Majnemer <david.majnemer@gmail.com>
Fri, 7 Jun 2013 22:07:20 +0000 (22:07 +0000)
committerDavid Majnemer <david.majnemer@gmail.com>
Fri, 7 Jun 2013 22:07:20 +0000 (22:07 +0000)
The approach r183084 took was wrong, back it out.

llvm-svn: 183575

clang/lib/Sema/SemaChecking.cpp
clang/test/Sema/outof-range-constant-compare.c

index d1ba64e8138638c1b1af63200aaac0bf21f8c44a..da24667804b5d361217b613646b6ef538eca8710 100644 (file)
@@ -4020,23 +4020,20 @@ struct IntRange {
     if (const ComplexType *CT = dyn_cast<ComplexType>(T))
       T = CT->getElementType().getTypePtr();
 
+    // For enum types, use the known bit width of the enumerators.
     if (const EnumType *ET = dyn_cast<EnumType>(T)) {
-      if (C.getLangOpts().CPlusPlus) {
-        // For enum types, use the known bit width of the enumerators.
-        EnumDecl *Enum = ET->getDecl();
-        if (!Enum->isCompleteDefinition())
-          return IntRange(C.getIntWidth(QualType(T, 0)), false);
+      EnumDecl *Enum = ET->getDecl();
+      if (!Enum->isCompleteDefinition())
+        return IntRange(C.getIntWidth(QualType(T, 0)), false);
 
-        unsigned NumPositive = Enum->getNumPositiveBits();
-        unsigned NumNegative = Enum->getNumNegativeBits();
+      unsigned NumPositive = Enum->getNumPositiveBits();
+      unsigned NumNegative = Enum->getNumNegativeBits();
 
-        if (NumNegative == 0)
-          return IntRange(NumPositive, true/*NonNegative*/);
-        else
-          return IntRange(std::max(NumPositive + 1, NumNegative),
-              false/*NonNegative*/);
-      } else
-        T = C.getCanonicalType(ET->getDecl()->getIntegerType().getTypePtr());
+      if (NumNegative == 0)
+        return IntRange(NumPositive, true/*NonNegative*/);
+      else
+        return IntRange(std::max(NumPositive + 1, NumNegative),
+                        false/*NonNegative*/);
     }
 
     const BuiltinType *BT = cast<BuiltinType>(T);
index 5aa7bc8a80ee54f2041e338cd183393d6d451b40..4b1637c46c5e32a541ff32f865e884ffba4bb4cb 100644 (file)
@@ -147,11 +147,3 @@ int main()
 
     return 1;
 }
-
-typedef enum {
-    alpha=0, bravo, charlie, delta, echo
-} named_t;
-
-static int bar(named_t foo) {
-    return foo > 42;
-}