]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: don't initialize blank struct fields
authorJosh Bleecher Snyder <josharian@gmail.com>
Wed, 24 Apr 2019 23:59:34 +0000 (16:59 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Thu, 25 Apr 2019 01:30:56 +0000 (01:30 +0000)
We already skipped blank field initialization in non-global contexts.
This change makes the global context treatment match.

Fixes #31546

Change-Id: I40acce49b0a9deb351ae0da098f4c114e425ec63
Reviewed-on: https://go-review.googlesource.com/c/go/+/173723
Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/cmd/compile/internal/gc/sinit.go
test/fixedbugs/issue31546.go [new file with mode: 0644]

index d755ea35ccde607e7aa6961748ed514c43672550..6666e8bb5eb239dc60d020c7f78d01acdc3f6a9b 100644 (file)
@@ -1278,6 +1278,9 @@ func (s *InitSchedule) initplan(n *Node) {
                        if a.Op != OSTRUCTKEY {
                                Fatalf("initplan structlit")
                        }
+                       if a.Sym.IsBlank() {
+                               continue
+                       }
                        s.addvalue(p, a.Xoffset, a.Left)
                }
 
diff --git a/test/fixedbugs/issue31546.go b/test/fixedbugs/issue31546.go
new file mode 100644 (file)
index 0000000..a459d4d
--- /dev/null
@@ -0,0 +1,20 @@
+// run
+
+// Copyright 2019 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.
+
+package main
+
+import (
+       "reflect"
+)
+
+var x = struct{ a, _, c int }{1, 2, 3}
+
+func main() {
+       if i := reflect.ValueOf(x).Field(1).Int(); i != 0 {
+               println("got", i, "want", 0)
+               panic("fail")
+       }
+}