Source file test/typeparam/issue54456.go

     1  // run
     2  
     3  // Copyright 2022 The Go Authors. All rights reserved.
     4  // Use of this source code is governed by a BSD-style
     5  // license that can be found in the LICENSE file.
     6  
     7  // The Go 1.18 frontend failed to disambiguate instantiations of
     8  // different, locally defined generic types with the same name.
     9  //
    10  // The unified frontend also exposed the scope-disambiguation mangling
    11  // to end users in reflect data.
    12  
    13  package main
    14  
    15  import (
    16  	"reflect"
    17  )
    18  
    19  func one() any { type T[_ any] int; return T[int](0) }
    20  func two() any { type T[_ any] int; return T[int](0) }
    21  
    22  func main() {
    23  	p, q := one(), two()
    24  
    25  	// p and q have different dynamic types; this comparison should
    26  	// evaluate false.
    27  	if p == q {
    28  		panic("bad type identity")
    29  	}
    30  
    31  	for _, x := range []any{p, q} {
    32  		// The names here should not contain "·1" or "·2".
    33  		if name := reflect.TypeOf(x).String(); name != "main.T[int]" {
    34  			panic(name)
    35  		}
    36  	}
    37  }
    38  

View as plain text