2
0
Эх сурвалжийг харах

Comparison with an enum causes compiler to crash (#1508)

Fixes #1479
Helena Kotas 7 жил өмнө
parent
commit
4dcd4153b2

+ 3 - 0
tools/clang/lib/Sema/SemaHLSL.cpp

@@ -3448,6 +3448,7 @@ public:
 
     case AR_BASIC_INT64:          return HLSLScalarType_int64;
     case AR_BASIC_UINT64:         return HLSLScalarType_uint64;
+    case AR_BASIC_ENUM:           return HLSLScalarType_int;
     default:
       return HLSLScalarType_unknown;
     }
@@ -3479,6 +3480,8 @@ public:
     case AR_BASIC_MIN12INT:       return m_scalarTypes[HLSLScalarType_int_min12];
     case AR_BASIC_MIN16INT:       return m_scalarTypes[HLSLScalarType_int_min16];
     case AR_BASIC_MIN16UINT:      return m_scalarTypes[HLSLScalarType_uint_min16];
+    case AR_BASIC_ENUM:           return m_context->IntTy;
+    case AR_BASIC_ENUM_CLASS:     return m_context->IntTy;
 
     case AR_OBJECT_STRING: return QualType();
 

+ 16 - 0
tools/clang/test/HLSL/enums.hlsl

@@ -198,5 +198,21 @@ int4 main() : SV_Target {
     float FaddU = MyEnumUInt::FOURU + 283.48f;
     float Fadd64 = MyEnum64::ZERO64  - 8471.0f;
 
+    if (MyEnum == ONE) 
+      ;
+    if (MyEnum != ONE) 
+      ;
+    if (MyEnum > ONE) 
+      ;
+
+    if (MyEnumClass == MyEnumClass::ONEC) 
+      ;
+    if (MyEnumClass != MyEnumClass::ONEC) 
+      ;
+    if (MyEnumClass < MyEnumClass::ONEC) /* expected-error {{numeric type expected}} */
+      ;
+
+    if (MyEnum == MyEnumClass::ONEC) ;  /* expected-error {{type mismatch}} */
+
     return 1;
 }