瀏覽代碼

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

Fixes #1479
Helena Kotas 7 年之前
父節點
當前提交
4dcd4153b2
共有 2 個文件被更改,包括 19 次插入0 次删除
  1. 3 0
      tools/clang/lib/Sema/SemaHLSL.cpp
  2. 16 0
      tools/clang/test/HLSL/enums.hlsl

+ 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;
 }