From: Matthew Dempsky Date: Mon, 10 Jan 2022 19:18:39 +0000 (+0000) Subject: Revert "cmd/compile: unique LinkString for renamed, embedded fields" X-Git-Tag: go1.18beta2~130 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=55d10acb72c2dc5524aae69ade560f3cf308a864;p=gostls13.git Revert "cmd/compile: unique LinkString for renamed, embedded fields" This reverts CL 372914. Reason for revert: missing synchronization Change-Id: I7ebb6de082cebb73741d803ff00e3465bbafab81 Reviewed-on: https://go-review.googlesource.com/c/go/+/377379 Trust: Dan Scales Reviewed-by: Bryan Mills Reviewed-by: Dan Scales Trust: Matthew Dempsky --- diff --git a/src/cmd/compile/internal/types/fmt.go b/src/cmd/compile/internal/types/fmt.go index 1399483424..3198a1f53c 100644 --- a/src/cmd/compile/internal/types/fmt.go +++ b/src/cmd/compile/internal/types/fmt.go @@ -631,7 +631,6 @@ func fldconv(b *bytes.Buffer, f *Field, verb rune, mode fmtMode, visited map[*Ty } var name string - nameSep := " " if verb != 'S' { s := f.Sym @@ -640,41 +639,9 @@ func fldconv(b *bytes.Buffer, f *Field, verb rune, mode fmtMode, visited map[*Ty s = OrigSym(s) } - if s != nil { + if s != nil && f.Embedded == 0 { if funarg != FunargNone { name = fmt.Sprint(f.Nname) - } else if f.Embedded != 0 { - // Using type aliases and embedded fields, it's possible to - // construct types that can't be directly represented as a - // type literal. For example, given "type Int = int" (#50190), - // it would be incorrect to format "struct{ Int }" as either - // "struct{ int }" or "struct{ Int int }", because those each - // represent other, distinct types. - // - // So for the purpose of LinkString (i.e., fmtTypeID), we use - // the non-standard syntax "struct{ Int = int }" to represent - // embedded fields that have been renamed through the use of - // type aliases. - if mode == fmtTypeID { - // Compute styp, the symbol that would normally be used as - // the field name when embedding f.Type. - // TODO(mdempsky): Check for other occurences of this logic - // and deduplicate. - typ := f.Type - if typ.Sym() == nil && typ.IsPtr() { - typ = typ.Elem() - } - styp := typ.Sym() - if styp != nil && IsExported(styp.Name) { - styp = LocalPkg.Lookup(styp.Name) - } - - // If embedded field was renamed, use syntax extension. - if s != styp { - name = sconv(s, 0, mode) - nameSep = " = " - } - } } else if verb == 'L' { name = s.Name if name == ".F" { @@ -691,7 +658,7 @@ func fldconv(b *bytes.Buffer, f *Field, verb rune, mode fmtMode, visited map[*Ty if name != "" { b.WriteString(name) - b.WriteString(nameSep) + b.WriteString(" ") } if f.IsDDD() { diff --git a/test/fixedbugs/issue50190.go b/test/fixedbugs/issue50190.go deleted file mode 100644 index 01ff6eacaa..0000000000 --- a/test/fixedbugs/issue50190.go +++ /dev/null @@ -1,21 +0,0 @@ -// 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. - -package main - -type int float32 - -type Int = int - -type A = struct{ int } -type B = struct{ Int } - -func main() { - var x, y interface{} = A{}, B{} - if x == y { - panic("FAIL") - } -}