// types. These rules work together with the decomposeBuiltIn
// pass which handles phis of these types.
+(Store {t} _ _ mem) && t.Size() == 0 => mem
+
// complex ops
(ComplexReal (ComplexMake real _ )) => real
(ComplexImag (ComplexMake _ imag )) => imag
b := v.Block
config := b.Func.Config
typ := &b.Func.Config.Types
+ // match: (Store {t} _ _ mem)
+ // cond: t.Size() == 0
+ // result: mem
+ for {
+ t := auxToType(v.Aux)
+ mem := v_2
+ if !(t.Size() == 0) {
+ break
+ }
+ v.copyOf(mem)
+ return true
+ }
// match: (Store {t} dst (ComplexMake real imag) mem)
// cond: t.Size() == 8
// result: (Store {typ.Float32} (OffPtr <typ.Float32Ptr> [4] dst) imag (Store {typ.Float32} dst real mem))
--- /dev/null
+// compile
+
+// Copyright 2023 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 ResourceFunc struct {
+ junk [8]int
+ base assignmentBaseResource
+}
+
+type SubscriptionAssignmentResource struct {
+ base assignmentBaseResource
+}
+
+type assignmentBaseResource struct{}
+
+//go:noinline
+func (a assignmentBaseResource) f(s string) ResourceFunc {
+ println(s)
+ return ResourceFunc{}
+}
+
+//go:noinline
+func (r SubscriptionAssignmentResource) Hi() ResourceFunc {
+ rf := r.base.f("Hello world")
+ rf.base = r.base
+ return rf
+}
+
+func main() {
+ var r SubscriptionAssignmentResource
+ r.Hi()
+}