diff options
| -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 |

