// run | |
// Copyright 2018 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. | |
// When computing method sets with shadowed methods, make sure we | |
// compute whether a method promotion involved a pointer traversal | |
// based on the promoted method, not the shadowed method. | |
package main | |
import ( | |
"bytes" | |
"fmt" | |
) | |
type mystruct struct { | |
f int | |
} | |
func (t mystruct) String() string { | |
return "FAIL" | |
} | |
func main() { | |
type deep struct { | |
mystruct | |
} | |
s := struct { | |
deep | |
*bytes.Buffer | |
}{ | |
deep{}, | |
bytes.NewBufferString("ok"), | |
} | |
if got := s.String(); got != "ok" { | |
panic(got) | |
} | |
var i fmt.Stringer = s | |
if got := i.String(); got != "ok" { | |
panic(got) | |
} | |
} |