]> Cypherpunks.ru repositories - gostls13.git/commit
cmd/compile/internal/noder: handle unsafe.Sizeof, etc in unified IR
authorMatthew Dempsky <mdempsky@google.com>
Fri, 8 Sep 2023 23:21:17 +0000 (16:21 -0700)
committerGopher Robot <gobot@golang.org>
Mon, 11 Sep 2023 20:48:07 +0000 (20:48 +0000)
commit2e457b3868d361eed146ab1a3272f16a7312d9c2
treebb36be575a5951f79302ba270f1efa805237e45f
parentf72693d3e9fffa72c44dce846bd7409e331f42a2
cmd/compile/internal/noder: handle unsafe.Sizeof, etc in unified IR

Previously, the unified frontend implemented unsafe.Sizeof, etc that
involved derived types by constructing a normal OSIZEOF, etc
expression, including fully instantiating their argument. (When
unsafe.Sizeof is applied to a non-generic type, types2 handles
constant folding it.)

This worked, but involves unnecessary work, since all we really need
to track is the argument type (and the field selections, for
unsafe.Offsetof).

Further, the argument expression could generate temporary variables,
which would then go unused after typecheck replaced the OSIZEOF
expression with an OLITERAL. This results in compiler failures after
CL 523315, which made later passes stricter about expecting the
frontend to not construct unused temporaries.

Fixes #62515.

Change-Id: I37baed048fd2e35648c59243f66c97c24413aa94
Reviewed-on: https://go-review.googlesource.com/c/go/+/527097
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-by: Keith Randall <khr@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Auto-Submit: Matthew Dempsky <mdempsky@google.com>
src/cmd/compile/internal/ir/const.go
src/cmd/compile/internal/noder/codes.go
src/cmd/compile/internal/noder/reader.go
src/cmd/compile/internal/noder/writer.go
test/fixedbugs/issue62515.go [new file with mode: 0644]