From 6cd4d59db6eaf00b45825b8074f03cc1e9086800 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Wed, 17 Dec 2014 08:52:59 -0800 Subject: [PATCH] test: add bug494: test case miscompiled by gccgo Gccgo incorrectly executed functions multiple times when they appeared in a composite literal that required a conversion between different interface types. Change-Id: I7b40e76ed23fa8440ffa03b262041265c109adf7 Reviewed-on: https://go-review.googlesource.com/1710 Reviewed-by: Brad Fitzpatrick Reviewed-by: Minux Ma --- test/fixedbugs/bug494.go | 51 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 test/fixedbugs/bug494.go diff --git a/test/fixedbugs/bug494.go b/test/fixedbugs/bug494.go new file mode 100644 index 0000000000..42f18797f7 --- /dev/null +++ b/test/fixedbugs/bug494.go @@ -0,0 +1,51 @@ +// 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 incorrectly executed functions multiple times when they +// appeared in a composite literal that required a conversion between +// different interface types. + +package main + +type MyInt int + +var c MyInt + +func (c *MyInt) S(i int) { + *c = MyInt(i) +} + +func (c *MyInt) V() int { + return int(*c) +} + +type i1 interface { + S(int) + V() int +} + +type i2 interface { + V() int +} + +type s struct { + i i2 +} + +func f() i1 { + c++ + return &c +} + +func main() { + p := &s{f()} + if v := p.i.V(); v != 1 { + panic(v) + } + if c != 1 { + panic(c) + } +} -- 2.50.0