Commit 280c8b90 authored by Daniel Morsing's avatar Daniel Morsing

cmd/gc: make method names for function scoped types unique

Types in function scope can have methods on them if they embed another type, but we didn't make the name unique, meaning that 2 identically named types in different functions would conflict with eachother.

Fixes #6269.

R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/13326045
parent bf58d209
......@@ -604,8 +604,11 @@ typefmt(Fmt *fp, Type *t)
if(!(fp->flags&FmtLong) && t->sym && t->etype != TFIELD && t != types[t->etype]) {
switch(fmtmode) {
case FTypeId:
if(fp->flags&FmtShort)
if(fp->flags&FmtShort) {
if(t->vargen)
return fmtprint(fp, "%hS·%d", t->sym, t->vargen);
return fmtprint(fp, "%hS", t->sym);
}
if(fp->flags&FmtUnsigned)
return fmtprint(fp, "%uS", t->sym);
// fallthrough
......
// run
// Copyright 2013 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.
// issue 6269: name collision on method names for function local types.
package main
type foo struct{}
func (foo) Error() string {
return "ok"
}
type bar struct{}
func (bar) Error() string {
return "fail"
}
func unused() {
type collision struct {
bar
}
_ = collision{}
}
func main() {
type collision struct {
foo
}
s := error(collision{})
if str := s.Error(); str != "ok" {
println("s.Error() ==", str)
panic(`s.Error() != "ok"`)
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment