| // run | 
 |  | 
 | // Copyright 2014 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. | 
 |  | 
 | // Gccgo chose the wrong embedded method when the same type appeared | 
 | // at different levels and the correct choice was not the first | 
 | // appearance of the type in a depth-first search. | 
 |  | 
 | package main | 
 |  | 
 | type embedded string | 
 |  | 
 | func (s embedded) val() string { | 
 | 	return string(s) | 
 | } | 
 |  | 
 | type A struct { | 
 | 	embedded | 
 | } | 
 |  | 
 | type B struct { | 
 | 	A | 
 | 	embedded | 
 | } | 
 |  | 
 | func main() { | 
 | 	b := &B{ | 
 | 		A: A{ | 
 | 			embedded: "a", | 
 | 		}, | 
 | 		embedded: "b", | 
 | 	} | 
 | 	s := b.val() | 
 | 	if s != "b" { | 
 | 		panic(s) | 
 | 	} | 
 | } |