diff options
author | Keith Randall <khr@golang.org> | 2021-07-30 09:06:38 -0700 |
---|---|---|
committer | Keith Randall <khr@golang.org> | 2021-07-30 21:01:32 +0000 |
commit | 40e561d9337afbae221b34d6d0811761f32412f6 (patch) | |
tree | 52f31fff2dc334cc5eca0c09dfa6598a657a729b /test | |
parent | fd0011dca5b35ec07ff53df4c3231a2a119796a9 (diff) | |
download | go-40e561d9337afbae221b34d6d0811761f32412f6.tar.gz go-40e561d9337afbae221b34d6d0811761f32412f6.zip |
[dev.typeparams] cmd/compile: allow types with the same underlying type to have the same shape
First baby step to sharing the underlying implementation among several types.
Change-Id: I6a156176d2b7f0131a87285a03b881ce380c26ed
Reviewed-on: https://go-review.googlesource.com/c/go/+/338610
Trust: Keith Randall <khr@golang.org>
Trust: Dan Scales <danscales@google.com>
Run-TryBot: Keith Randall <khr@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Dan Scales <danscales@google.com>
Diffstat (limited to 'test')
-rw-r--r-- | test/typeparam/shape1.go | 33 | ||||
-rw-r--r-- | test/typeparam/shape1.out | 2 |
2 files changed, 35 insertions, 0 deletions
diff --git a/test/typeparam/shape1.go b/test/typeparam/shape1.go new file mode 100644 index 0000000000..3c9e71ea63 --- /dev/null +++ b/test/typeparam/shape1.go @@ -0,0 +1,33 @@ +// run -gcflags=-G=3 + +// Copyright 2021 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 I interface { + foo() int +} + +// There should be a single instantiation of f in this program. +func f[T I](x T) int { + return x.foo() +} + +type squarer int + +func (x squarer) foo() int { + return int(x*x) +} + +type doubler int + +func (x doubler) foo() int { + return int(2*x) +} + +func main() { + println(f(squarer(5))) + println(f(doubler(5))) +} diff --git a/test/typeparam/shape1.out b/test/typeparam/shape1.out new file mode 100644 index 0000000000..28391fde66 --- /dev/null +++ b/test/typeparam/shape1.out @@ -0,0 +1,2 @@ +25 +10 |