internal/shader: bug fix: variables in an index should be marked as used

Closes #2848
This commit is contained in:
Hajime Hoshi 2023-11-19 14:50:40 +09:00
parent 6d18367f52
commit 9b9384baa0
2 changed files with 16 additions and 1 deletions

View File

@ -913,7 +913,7 @@ func (cs *compileState) parseExpr(block *block, fname string, expr ast.Expr, mar
var stmts []shaderir.Stmt var stmts []shaderir.Stmt
// Parse the index first // Parse the index first
exprs, _, ss, ok := cs.parseExpr(block, fname, e.Index, markLocalVariableUsed) exprs, _, ss, ok := cs.parseExpr(block, fname, e.Index, true)
if !ok { if !ok {
return nil, nil, nil, false return nil, nil, nil, false
} }

View File

@ -514,6 +514,21 @@ func Fragment(dstPos vec4, srcPos vec2, color vec4) vec4 {
`)); err == nil { `)); err == nil {
t.Errorf("error must be non-nil but was nil") t.Errorf("error must be non-nil but was nil")
} }
// Issue #2848
if _, err := compileToIR([]byte(`package main
func Fragment(dstPos vec4, srcPos vec2, color vec4) vec4 {
var floats [4]float
for i := 0; i < 3; i++ {
j := i + 1
floats[j] = float(i)
}
return vec4(floats[0], floats[1], floats[2], floats[3])
}
`)); err != nil {
t.Error(err)
}
} }
func TestSyntaxBlankLhs(t *testing.T) { func TestSyntaxBlankLhs(t *testing.T) {