PR17103: Scoped enumerations with signed integer types have signed integer

representation. Don't emit comparisons on them as 'icmp ult'!

llvm-svn: 190010
This commit is contained in:
Richard Smith 2013-09-04 23:34:21 +00:00
parent 1df64b081b
commit 49a497fa6c
2 changed files with 12 additions and 5 deletions

View File

@ -738,9 +738,9 @@ bool Type::isSignedIntegerOrEnumerationType() const {
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::isUnsignedIntegerOrEnumerationType() const {
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 {

View File

@ -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