diff options
Diffstat (limited to 'src/cmd/compile/internal/gc/testdata/reproducible')
4 files changed, 136 insertions, 0 deletions
diff --git a/src/cmd/compile/internal/gc/testdata/reproducible/issue20272.go b/src/cmd/compile/internal/gc/testdata/reproducible/issue20272.go new file mode 100644 index 0000000..3db0b8a --- /dev/null +++ b/src/cmd/compile/internal/gc/testdata/reproducible/issue20272.go @@ -0,0 +1,34 @@ +// Copyright 2017 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 p + +var ( + i0 uint8 + b0 byte + + i1 *uint8 + b1 *byte + + i2 **uint8 + b2 **byte + + i3 ***uint8 + b3 ***byte + + i4 ****uint8 + b4 ****byte + + i5 *****uint8 + b5 *****byte + + i6 ******uint8 + b6 ******byte + + i7 *******uint8 + b7 *******byte + + i8 ********uint8 + b8 ********byte +) diff --git a/src/cmd/compile/internal/gc/testdata/reproducible/issue27013.go b/src/cmd/compile/internal/gc/testdata/reproducible/issue27013.go new file mode 100644 index 0000000..817f4a6 --- /dev/null +++ b/src/cmd/compile/internal/gc/testdata/reproducible/issue27013.go @@ -0,0 +1,15 @@ +// Copyright 2018 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 p + +func A(arg interface{}) { + _ = arg.(interface{ Func() int32 }) + _ = arg.(interface{ Func() int32 }) + _ = arg.(interface{ Func() int32 }) + _ = arg.(interface{ Func() int32 }) + _ = arg.(interface{ Func() int32 }) + _ = arg.(interface{ Func() int32 }) + _ = arg.(interface{ Func() int32 }) +} diff --git a/src/cmd/compile/internal/gc/testdata/reproducible/issue30202.go b/src/cmd/compile/internal/gc/testdata/reproducible/issue30202.go new file mode 100644 index 0000000..7b5de2c --- /dev/null +++ b/src/cmd/compile/internal/gc/testdata/reproducible/issue30202.go @@ -0,0 +1,17 @@ +// Copyright 2019 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 p + +func A(x interface { + X() int +}) int { + return x.X() +} + +func B(x interface { + X() int +}) int { + return x.X() +} diff --git a/src/cmd/compile/internal/gc/testdata/reproducible/issue38068.go b/src/cmd/compile/internal/gc/testdata/reproducible/issue38068.go new file mode 100644 index 0000000..db5ca7d --- /dev/null +++ b/src/cmd/compile/internal/gc/testdata/reproducible/issue38068.go @@ -0,0 +1,70 @@ +// 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 dtypesym() 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) +} |