r190010 - PR17103: Scoped enumerations with signed integer types have signed integer

Richard Smith richard-llvm at metafoo.co.uk
Wed Sep 4 16:34:22 PDT 2013


Author: rsmith
Date: Wed Sep  4 18:34:21 2013
New Revision: 190010

URL: http://llvm.org/viewvc/llvm-project?rev=190010&view=rev
Log:
PR17103: Scoped enumerations with signed integer types have signed integer
representation. Don't emit comparisons on them as 'icmp ult'!

Modified:
    cfe/trunk/lib/AST/Type.cpp
    cfe/trunk/test/CodeGenCXX/scoped-enums.cpp

Modified: cfe/trunk/lib/AST/Type.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Type.cpp?rev=190010&r1=190009&r2=190010&view=diff
==============================================================================
--- cfe/trunk/lib/AST/Type.cpp (original)
+++ cfe/trunk/lib/AST/Type.cpp Wed Sep  4 18:34:21 2013
@@ -738,9 +738,9 @@ bool Type::isSignedIntegerOrEnumerationT
 
 bool Type::hasSignedIntegerRepresentation() const {
   if (const VectorType *VT = dyn_cast<VectorType>(CanonicalType))
-    return VT->getElementType()->isSignedIntegerType();
+    return VT->getElementType()->isSignedIntegerOrEnumerationType();
   else
-    return isSignedIntegerType();
+    return isSignedIntegerOrEnumerationType();
 }
 
 /// isUnsignedIntegerType - Return true if this is an integer type that is
@@ -778,9 +778,9 @@ bool Type::isUnsignedIntegerOrEnumeratio
 
 bool Type::hasUnsignedIntegerRepresentation() const {
   if (const VectorType *VT = dyn_cast<VectorType>(CanonicalType))
-    return VT->getElementType()->isUnsignedIntegerType();
+    return VT->getElementType()->isUnsignedIntegerOrEnumerationType();
   else
-    return isUnsignedIntegerType();
+    return isUnsignedIntegerOrEnumerationType();
 }
 
 bool Type::isFloatingType() const {

Modified: cfe/trunk/test/CodeGenCXX/scoped-enums.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/scoped-enums.cpp?rev=190010&r1=190009&r2=190010&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenCXX/scoped-enums.cpp (original)
+++ cfe/trunk/test/CodeGenCXX/scoped-enums.cpp Wed Sep  4 18:34:21 2013
@@ -1,4 +1,4 @@
-// RUN: %clang_cc1 -std=c++11 -emit-llvm -o - %s
+// RUN: %clang_cc1 -std=c++11 -emit-llvm -o - %s | FileCheck %s
 
 // PR9923
 enum class Color { red, blue, green };
@@ -15,3 +15,10 @@ void h(Colour);
 void i() {
   h(Colour::grey);
 }
+
+enum struct PR17103 : int { a = -1, b = 1 };
+bool cmp(PR17103 x, PR17103 y) { return x < y; }
+
+// CHECK-LABEL: @_Z3cmp7PR17103S_(
+// CHECK-NOT: }
+// CHECK: icmp slt





More information about the cfe-commits mailing list