]> granicus.if.org Git - clang/commitdiff
The integer type of an enumeration type isn't always canonical
authorDouglas Gregor <dgregor@apple.com>
Thu, 8 Sep 2011 23:29:05 +0000 (23:29 +0000)
committerDouglas Gregor <dgregor@apple.com>
Thu, 8 Sep 2011 23:29:05 +0000 (23:29 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@139334 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Sema/SemaChecking.cpp
test/SemaObjC/enum-fixed-type.m

index aec90bd9ceedbbd18f8a4675e1b0edb7092c2c83..b1a87a83dcebdd815cf6325585d38f4a315b36df 100644 (file)
@@ -2597,7 +2597,7 @@ struct IntRange {
     if (const ComplexType *CT = dyn_cast<ComplexType>(T))
       T = CT->getElementType().getTypePtr();
     if (const EnumType *ET = dyn_cast<EnumType>(T))
-      T = ET->getDecl()->getIntegerType().getTypePtr();
+      T = C.getCanonicalType(ET->getDecl()->getIntegerType()).getTypePtr();
 
     const BuiltinType *BT = cast<BuiltinType>(T);
     assert(BT->isInteger());
index 0ec8db476c59071d53711663fbe5765f74913747..530ee0fe9995736b179d3f9217994b7f0fefb386 100644 (file)
@@ -20,3 +20,8 @@ struct X {
   enum Other : Integer field3 : 4;
   enum  : Integer { Blah, Blarg } field4 : 4;
 };
+
+void test() {
+  long value = 2;
+  Enumeration e = value;
+}