summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2011-09-08 23:29:05 +0000
committerDouglas Gregor <dgregor@apple.com>2011-09-08 23:29:05 +0000
commit3168dcf134222d9921d19e926f36784b94355948 (patch)
tree4bfd9965dab04483b61d4737d711add1ef220cc5
parent22164ed9438b01018022ff27639ed97763f8dec5 (diff)
downloadbcm5719-llvm-3168dcf134222d9921d19e926f36784b94355948.tar.gz
bcm5719-llvm-3168dcf134222d9921d19e926f36784b94355948.zip
The integer type of an enumeration type isn't always canonical
llvm-svn: 139334
-rw-r--r--clang/lib/Sema/SemaChecking.cpp2
-rw-r--r--clang/test/SemaObjC/enum-fixed-type.m5
2 files changed, 6 insertions, 1 deletions
diff --git a/clang/lib/Sema/SemaChecking.cpp b/clang/lib/Sema/SemaChecking.cpp
index aec90bd9cee..b1a87a83dce 100644
--- a/clang/lib/Sema/SemaChecking.cpp
+++ b/clang/lib/Sema/SemaChecking.cpp
@@ -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());
diff --git a/clang/test/SemaObjC/enum-fixed-type.m b/clang/test/SemaObjC/enum-fixed-type.m
index 0ec8db476c5..530ee0fe999 100644
--- a/clang/test/SemaObjC/enum-fixed-type.m
+++ b/clang/test/SemaObjC/enum-fixed-type.m
@@ -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;
+}
OpenPOWER on IntegriCloud