diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 13:18:25 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 13:18:25 +0000 |
commit | 109be507377fe7f6e8819ac94041d3fdcdf6fd2f (patch) | |
tree | 2806a689f8fab4a2ec9fc949830ef270a91d667d /test/fixedbugs/bug473.go | |
parent | Initial commit. (diff) | |
download | golang-1.19-upstream.tar.xz golang-1.19-upstream.zip |
Adding upstream version 1.19.8.upstream/1.19.8upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | test/fixedbugs/bug473.go | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/test/fixedbugs/bug473.go b/test/fixedbugs/bug473.go new file mode 100644 index 0000000..7649b6b --- /dev/null +++ b/test/fixedbugs/bug473.go @@ -0,0 +1,69 @@ +// 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. + +// Used to be miscompiled by gccgo, due to a bug in handling +// initialization ordering. + +package main + +func F(a ...interface{}) interface{} { + s := 0 + for _, v := range a { + s += v.(int) + } + return s +} + +var V1 = F(V10, V4, V3, V11) + +var V2 = F(V1) + +var V3 = F(1) + +var V4 = F(2) + +var V5 = F(3) + +var V6 = F(4) + +var V7 = F(5) + +var V8 = F(V14, V7, V3, V6, V5) + +var V9 = F(V4, F(V12)) + +var V10 = F(V4, V9) + +var V11 = F(6) + +var V12 = F(V5, V3, V8) + +var V13 = F(7) + +var V14 = F(8) + +func expect(name string, a interface{}, b int) { + if a.(int) != b { + panic(name) + } +} + +func main() { + expect("V1", V1, 38) + expect("V2", V2, 38) + expect("V3", V3, 1) + expect("V4", V4, 2) + expect("V5", V5, 3) + expect("V6", V6, 4) + expect("V7", V7, 5) + expect("V8", V8, 21) + expect("V9", V9, 27) + expect("V10", V10, 29) + expect("V11", V11, 6) + expect("V12", V12, 25) + expect("V13", V13, 7) + expect("V14", V14, 8) +} |