// run -gcflags=-G=3

// Copyright 2022 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

import "fmt"

type MyStruct struct {
	b1, b2 string
	E
}

type E struct {
	val int
}

type C interface {
	~struct {
		b1, b2 string
		E
	}
}

func f[T C]() T {
	var x T = T{
		b1: "a",
		b2: "b",
	}

	if got, want := x.b2, "b"; got != want {
		panic(fmt.Sprintf("got %d, want %d", got, want))
	}
	x.b1 = "y"
	x.val = 5

	return x
}

func main() {
	x := f[MyStruct]()
	if got, want := x.b1, "y"; got != want {
		panic(fmt.Sprintf("got %d, want %d", got, want))
	}
	if got, want := x.val, 5; got != want {
		panic(fmt.Sprintf("got %d, want %d", got, want))
	}
}
