Quellcode durchsuchen

Report error on rval assign. (#376)

Xiang Li vor 8 Jahren
Ursprung
Commit
2b322860e1

+ 4 - 0
tools/clang/lib/Sema/SemaExpr.cpp

@@ -9363,6 +9363,10 @@ static bool HLSLCheckForModifiableLValue(
       DiagnoseConstAssignment(S, LHS, Loc);
       return true;
     }
+    if (!LHS->isLValue()) {
+      S.Diag(Loc, diag::err_typecheck_expression_not_modifiable_lvalue);
+      return true;
+    }
     return false;
 }
 

+ 12 - 0
tools/clang/test/CodeGenHLSL/rval_assign.hlsl

@@ -0,0 +1,12 @@
+// RUN: %dxc -E main -T ps_6_0 %s | FileCheck %s
+
+
+// CHECK: expression is not assignable
+// CHECK: expression is not assignable
+
+
+float4 main(float2x4 mat: A, float4 b:B, float4 c:C) : SV_Target {
+  (mat + mat)[1] = (mat * mat)[0];
+  (b+c)[2] = c.y;
+  return mat[0] + mat[1];
+}

+ 5 - 0
tools/clang/unittests/HLSL/CompilerTest.cpp

@@ -593,6 +593,7 @@ public:
   TEST_METHOD(CodeGenRedundantinput1)
   TEST_METHOD(CodeGenRes64bit)
   TEST_METHOD(CodeGenRovs)
+  TEST_METHOD(CodeGenRValAssign)
   TEST_METHOD(CodeGenRValSubscript)
   TEST_METHOD(CodeGenSample1)
   TEST_METHOD(CodeGenSample2)
@@ -3159,6 +3160,10 @@ TEST_F(CompilerTest, CodeGenRovs) {
   CodeGenTestCheck(L"..\\CodeGenHLSL\\rovs.hlsl");
 }
 
+TEST_F(CompilerTest, CodeGenRValAssign) {
+  CodeGenTestCheck(L"..\\CodeGenHLSL\\rval_assign.hlsl");
+}
+
 TEST_F(CompilerTest, CodeGenRValSubscript) {
   CodeGenTestCheck(L"..\\CodeGenHLSL\\RValSubscript.hlsl");
 }