// 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. // Issue 26248: gccgo miscompiles interface field expression. // In G().M where G returns an interface, G() is evaluated twice. package main type I interface { M() } type T struct{} func (T) M() {} var g = 0 //go:noinline func G() I { g++ return T{} } //go:noinline func Use(interface{}) {} func main() { x := G().M Use(x) if g != 1 { println("want 1, got", g) panic("FAIL") } }