|  | // run | 
|  |  | 
|  | // 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 | 
|  |  | 
|  | func main() {} | 
|  |  | 
|  | // Field accesses through type parameters are disabled | 
|  | // until we have a more thorough understanding of the | 
|  | // implications on the spec. See issue #51576. | 
|  |  | 
|  | /* | 
|  | type Sf struct { | 
|  | f int | 
|  | } | 
|  |  | 
|  | func f0[P Sf](p P) { | 
|  | _ = p.f | 
|  | p.f = 0 | 
|  | } | 
|  |  | 
|  | func f0t[P ~struct{ f int }](p P) { | 
|  | _ = p.f | 
|  | p.f = 0 | 
|  | } | 
|  |  | 
|  | var _ = f0[Sf] | 
|  | var _ = f0t[Sf] | 
|  |  | 
|  | func f1[P interface { | 
|  | ~struct{ f int } | 
|  | m() | 
|  | }](p P) { | 
|  | _ = p.f | 
|  | p.f = 0 | 
|  | p.m() | 
|  | } | 
|  |  | 
|  | var _ = f1[Sfm] | 
|  |  | 
|  | type Sm struct{} | 
|  |  | 
|  | func (Sm) m() {} | 
|  |  | 
|  | type Sfm struct { | 
|  | f int | 
|  | } | 
|  |  | 
|  | func (Sfm) m() {} | 
|  |  | 
|  | func f2[P interface { | 
|  | Sfm | 
|  | m() | 
|  | }](p P) { | 
|  | _ = p.f | 
|  | p.f = 0 | 
|  | p.m() | 
|  | } | 
|  |  | 
|  | var _ = f2[Sfm] | 
|  |  | 
|  | // special case: core type is a named pointer type | 
|  |  | 
|  | type PSfm *Sfm | 
|  |  | 
|  | func f3[P interface{ PSfm }](p P) { | 
|  | _ = p.f | 
|  | p.f = 0 | 
|  | } | 
|  |  | 
|  | var _ = f3[PSfm] | 
|  |  | 
|  | // special case: core type is an unnamed pointer type | 
|  |  | 
|  | func f4[P interface{ *Sfm }](p P) { | 
|  | _ = p.f | 
|  | p.f = 0 | 
|  | } | 
|  |  | 
|  | var _ = f4[*Sfm] | 
|  |  | 
|  | type A int | 
|  | type B int | 
|  | type C float64 | 
|  |  | 
|  | type Int interface { | 
|  | *Sf | A | 
|  | *Sf | B | 
|  | } | 
|  |  | 
|  | func f5[P Int](p P) { | 
|  | _ = p.f | 
|  | p.f = 0 | 
|  | } | 
|  |  | 
|  | var _ = f5[*Sf] | 
|  |  | 
|  | type Int2 interface { | 
|  | *Sf | A | 
|  | any | 
|  | *Sf | C | 
|  | } | 
|  |  | 
|  | func f6[P Int2](p P) { | 
|  | _ = p.f | 
|  | p.f = 0 | 
|  | } | 
|  |  | 
|  | var _ = f6[*Sf] | 
|  |  | 
|  | type Int3 interface { | 
|  | Sf | 
|  | ~struct{ f int } | 
|  | } | 
|  |  | 
|  | func f7[P Int3](p P) { | 
|  | _ = p.f | 
|  | p.f = 0 | 
|  | } | 
|  |  | 
|  | var _ = f7[Sf] | 
|  |  | 
|  | type Em1 interface { | 
|  | *Sf | A | 
|  | } | 
|  |  | 
|  | type Em2 interface { | 
|  | *Sf | B | 
|  | } | 
|  |  | 
|  | type Int4 interface { | 
|  | Em1 | 
|  | Em2 | 
|  | any | 
|  | } | 
|  |  | 
|  | func f8[P Int4](p P) { | 
|  | _ = p.f | 
|  | p.f = 0 | 
|  | } | 
|  |  | 
|  | var _ = f8[*Sf] | 
|  | */ |