1
0
mirror of https://github.com/golang/go synced 2024-11-22 10:44:41 -07:00
go/test/typeparam/genembed.go
Matthew Dempsky e24977d231 all: avoid use of cmd/compile -G flag in tests
The next CL will remove the -G flag, effectively hard-coding it to its
current default (-G=3).

Change-Id: Ib4743b529206928f9f1cca9fdb19989728327831
Reviewed-on: https://go-review.googlesource.com/c/go/+/388534
Reviewed-by: Keith Randall <khr@golang.org>
Trust: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
2022-03-01 19:45:34 +00:00

53 lines
901 B
Go

// run
// 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.
// Test wrappers/interfaces for generic type embedding another generic type.
package main
import "fmt"
type A[T any] struct {
B[T]
}
type B[T any] struct {
val T
}
func (b *B[T]) get() T {
return b.val
}
type getter[T any] interface {
get() T
}
//go:noinline
func doGet[T any](i getter[T]) T {
return i.get()
}
//go:noline
func doGet2[T any](i interface{}) T {
i2 := i.(getter[T])
return i2.get()
}
func main() {
a := A[int]{B: B[int]{3}}
var i getter[int] = &a
if got, want := doGet(i), 3; got != want {
panic(fmt.Sprintf("got %v, want %v", got, want))
}
as := A[string]{B: B[string]{"abc"}}
if got, want := doGet2[string](&as), "abc"; got != want {
panic(fmt.Sprintf("got %v, want %v", got, want))
}
}