From acce3abb7e1c39bc867d6e6dd2277451bd41d53a Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Mon, 20 Mar 2023 14:29:05 -0700 Subject: [PATCH] cmd/compile/internal/types2: avoid unpacking single-value LHS For ++/-- statements, we know that syntax.AssignStmt.Lhs is a single expression. Avoid unpacking (and allocating a slice) in that case. Minor optimization. Change-Id: I6615fd12277b1cd7d4f8b86e0b9d39f27708c13e Reviewed-on: https://go-review.googlesource.com/c/go/+/477915 Run-TryBot: Robert Griesemer TryBot-Result: Gopher Robot Reviewed-by: Robert Findley Reviewed-by: Robert Griesemer Auto-Submit: Robert Griesemer --- src/cmd/compile/internal/types2/stmt.go | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/src/cmd/compile/internal/types2/stmt.go b/src/cmd/compile/internal/types2/stmt.go index f87ef11b98..3e5c9cb6cd 100644 --- a/src/cmd/compile/internal/types2/stmt.go +++ b/src/cmd/compile/internal/types2/stmt.go @@ -446,26 +446,23 @@ func (check *Checker) stmt(ctxt stmtContext, s syntax.Stmt) { check.assignment(&val, uch.elem, "send") case *syntax.AssignStmt: - lhs := unpackExpr(s.Lhs) if s.Rhs == nil { // x++ or x-- - if len(lhs) != 1 { - check.errorf(s, InvalidSyntaxTree, "%s%s requires one operand", s.Op, s.Op) - return - } + // (no need to call unpackExpr as s.Lhs must be single-valued) var x operand - check.expr(&x, lhs[0]) + check.expr(&x, s.Lhs) if x.mode == invalid { return } if !allNumeric(x.typ) { - check.errorf(lhs[0], NonNumericIncDec, invalidOp+"%s%s%s (non-numeric type %s)", lhs[0], s.Op, s.Op, x.typ) + check.errorf(s.Lhs, NonNumericIncDec, invalidOp+"%s%s%s (non-numeric type %s)", s.Lhs, s.Op, s.Op, x.typ) return } - check.assignVar(lhs[0], &x) + check.assignVar(s.Lhs, &x) return } + lhs := unpackExpr(s.Lhs) rhs := unpackExpr(s.Rhs) switch s.Op { case 0: -- 2.48.1