mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile: allow more args in StructMake folding rule
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>
This commit is contained in:
parent
3406a617d9
commit
72e8237cc1
3 changed files with 28 additions and 3 deletions
|
|
@ -921,7 +921,7 @@
|
||||||
@x.Block (Load <v.Type> (OffPtr <v.Type.PtrTo()> [t.FieldOff(int(i))] ptr) mem)
|
@x.Block (Load <v.Type> (OffPtr <v.Type.PtrTo()> [t.FieldOff(int(i))] ptr) mem)
|
||||||
|
|
||||||
// Putting struct{*byte} and similar into direct interfaces.
|
// Putting struct{*byte} and similar into direct interfaces.
|
||||||
(IMake _typ (StructMake val)) => imakeOfStructMake(v)
|
(IMake _typ (StructMake ___)) => imakeOfStructMake(v)
|
||||||
(StructSelect [_] (IData x)) => (IData x)
|
(StructSelect [_] (IData x)) => (IData x)
|
||||||
|
|
||||||
// un-SSAable values use mem->mem copies
|
// un-SSAable values use mem->mem copies
|
||||||
|
|
|
||||||
|
|
@ -11200,10 +11200,10 @@ func rewriteValuegeneric_OpFloor(v *Value) bool {
|
||||||
func rewriteValuegeneric_OpIMake(v *Value) bool {
|
func rewriteValuegeneric_OpIMake(v *Value) bool {
|
||||||
v_1 := v.Args[1]
|
v_1 := v.Args[1]
|
||||||
v_0 := v.Args[0]
|
v_0 := v.Args[0]
|
||||||
// match: (IMake _typ (StructMake val))
|
// match: (IMake _typ (StructMake ___))
|
||||||
// result: imakeOfStructMake(v)
|
// result: imakeOfStructMake(v)
|
||||||
for {
|
for {
|
||||||
if v_1.Op != OpStructMake || len(v_1.Args) != 1 {
|
if v_1.Op != OpStructMake {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
v.copyOf(imakeOfStructMake(v))
|
v.copyOf(imakeOfStructMake(v))
|
||||||
|
|
|
||||||
25
test/fixedbugs/issue74908.go
Normal file
25
test/fixedbugs/issue74908.go
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
// 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,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue