X7ROOT File Manager
Current Path:
/opt/golang/1.19.4/src/cmd/compile/internal/test/testdata/reproducible
opt
/
golang
/
1.19.4
/
src
/
cmd
/
compile
/
internal
/
test
/
testdata
/
reproducible
/
📁
..
📄
issue20272.go
(430 B)
📄
issue27013.go
(458 B)
📄
issue30202.go
(282 B)
📄
issue38068.go
(1.35 KB)
Editing: issue38068.go
// Copyright 2020 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 issue38068 // A type with a couple of inlinable, non-pointer-receiver methods // that have params and local variables. type A struct { s string next *A prev *A } // Inlinable, value-received method with locals and parms. func (a A) double(x string, y int) string { if y == 191 { a.s = "" } q := a.s + "a" r := a.s + "b" return q + r } // Inlinable, value-received method with locals and parms. func (a A) triple(x string, y int) string { q := a.s if y == 998877 { a.s = x } r := a.s + a.s return q + r } type methods struct { m1 func(a *A, x string, y int) string m2 func(a *A, x string, y int) string } // Now a function that makes references to the methods via pointers, // which should trigger the wrapper generation. func P(a *A, ms *methods) { if a != nil { defer func() { println("done") }() } println(ms.m1(a, "a", 2)) println(ms.m2(a, "b", 3)) } func G(x *A, n int) { if n <= 0 { println(n) return } // Address-taken local of type A, which will insure that the // compiler's writeType() routine will create a method wrapper. var a, b A a.next = x a.prev = &b x = &a G(x, n-2) } var M methods func F() { M.m1 = (*A).double M.m2 = (*A).triple G(nil, 100) }
Upload File
Create Folder