imakeOfStructMake does the right thing, but we never call it
when the StructMake has more than one argument.
Fixes #74908
Change-Id: Ib4b1a025bfb1fa69a325207e47b74bd6217092bf
Reviewed-on: https://go-review.googlesource.com/c/go/+/693615
Auto-Submit: Keith Randall <khr@golang.org>
Reviewed-by: David Chase <drchase@google.com>
Reviewed-by: Keith Randall <khr@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
@x.Block (Load <v.Type> (OffPtr <v.Type.PtrTo()> [t.FieldOff(int(i))] ptr) mem)
// Putting struct{*byte} and similar into direct interfaces.
-(IMake _typ (StructMake val)) => imakeOfStructMake(v)
+(IMake _typ (StructMake ___)) => imakeOfStructMake(v)
(StructSelect [_] (IData x)) => (IData x)
// un-SSAable values use mem->mem copies
func rewriteValuegeneric_OpIMake(v *Value) bool {
v_1 := v.Args[1]
v_0 := v.Args[0]
- // match: (IMake _typ (StructMake val))
+ // match: (IMake _typ (StructMake ___))
// result: imakeOfStructMake(v)
for {
- if v_1.Op != OpStructMake || len(v_1.Args) != 1 {
+ if v_1.Op != OpStructMake {
break
}
v.copyOf(imakeOfStructMake(v))
--- /dev/null
+// compile
+
+// Copyright 2025 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package main
+
+type Type struct {
+ any
+}
+
+type typeObject struct {
+ e struct{}
+ b *byte
+}
+
+func f(b *byte) Type {
+ return Type{
+ typeObject{
+ b: b,
+ },
+ }
+
+}