| // 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] |
| */ |