diff options
| author | Richard Smith <richard-llvm@metafoo.co.uk> | 2013-09-04 23:34:21 +0000 |
|---|---|---|
| committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2013-09-04 23:34:21 +0000 |
| commit | 49a497fa6c4f86695f1e4ceb81f0ac3beb16e167 (patch) | |
| tree | c63a83c43665ba6e86b78e4cf494ac5fd7a9f137 /clang | |
| parent | 1df64b081b0b1f4f58d91bbd3f84743024d53598 (diff) | |
| download | bcm5719-llvm-49a497fa6c4f86695f1e4ceb81f0ac3beb16e167.tar.gz bcm5719-llvm-49a497fa6c4f86695f1e4ceb81f0ac3beb16e167.zip | |
PR17103: Scoped enumerations with signed integer types have signed integer
representation. Don't emit comparisons on them as 'icmp ult'!
llvm-svn: 190010
Diffstat (limited to 'clang')
| -rw-r--r-- | clang/lib/AST/Type.cpp | 8 | ||||
| -rw-r--r-- | clang/test/CodeGenCXX/scoped-enums.cpp | 9 |
2 files changed, 12 insertions, 5 deletions
diff --git a/clang/lib/AST/Type.cpp b/clang/lib/AST/Type.cpp index b848d3a2247..8027f52216f 100644 --- a/clang/lib/AST/Type.cpp +++ b/clang/lib/AST/Type.cpp @@ -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 { diff --git a/clang/test/CodeGenCXX/scoped-enums.cpp b/clang/test/CodeGenCXX/scoped-enums.cpp index c20faaaf2e9..159172d1662 100644 --- a/clang/test/CodeGenCXX/scoped-enums.cpp +++ b/clang/test/CodeGenCXX/scoped-enums.cpp @@ -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 |

