From 09cefc6e71bd9d7cede2582d917beae8651b71b9 Mon Sep 17 00:00:00 2001 From: Hajime Hoshi Date: Fri, 26 Jul 2024 00:06:09 +0900 Subject: [PATCH] internal/shader: bug fix: crash with an invalid operand Closes #2989 --- internal/shader/expr.go | 4 ++++ internal/shader/syntax_test.go | 13 ++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/internal/shader/expr.go b/internal/shader/expr.go index f5460a831..286e856a5 100644 --- a/internal/shader/expr.go +++ b/internal/shader/expr.go @@ -88,6 +88,10 @@ func (cs *compileState) parseExpr(block *block, fname string, expr ast.Expr, mar return nil, nil, nil, false } stmts = append(stmts, ss...) + if len(ts) == 0 { + cs.addError(e.Pos(), fmt.Sprintf("unexpected binary operator: %s", e.Y)) + return nil, nil, nil, false + } rhst := ts[0] op := e.Op diff --git a/internal/shader/syntax_test.go b/internal/shader/syntax_test.go index 3c07065b2..4128aa0f8 100644 --- a/internal/shader/syntax_test.go +++ b/internal/shader/syntax_test.go @@ -4277,7 +4277,7 @@ func Bar() (int, int) { } } -// Issue #2926 +// Issue #2926, #2989 func TestSyntaxNonTypeExpression(t *testing.T) { if _, err := compileToIR([]byte(`package main @@ -4306,6 +4306,17 @@ func Bar() float { func Foo() { } +func Bar() float { + return 1.0 + Foo +} +`)); err == nil { + t.Error("compileToIR must return an error but did not") + } + if _, err := compileToIR([]byte(`package main + +func Foo() { +} + func Bar() float { return Foo.x }