diff options
| author | Cherry Zhang <cherryyz@google.com> | 2017-02-08 15:31:24 -0500 |
|---|---|---|
| committer | Cherry Zhang <cherryyz@google.com> | 2017-02-08 21:01:51 +0000 |
| commit | a146dd3a2fdf87bab90ee1f636c38cd3444e55fa (patch) | |
| tree | 771c4b8a0abbb22f958e168da103f15e40643807 /src | |
| parent | e3efdffacdd27786ecf0647272e54c664daf4c94 (diff) | |
| download | go-a146dd3a2fdf87bab90ee1f636c38cd3444e55fa.tar.xz | |
cmd/compile: handle DOT STRUCTLIT for zero-valued struct in SSA
CL 35261 makes SSA handle zero-valued STRUCTLIT, but DOT operation
was not handled.
Fixes #18994.
Change-Id: Ic7976036acca1523b0b14afac4d170797e8aee20
Reviewed-on: https://go-review.googlesource.com/36565
Run-TryBot: Cherry Zhang <cherryyz@google.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src')
| -rw-r--r-- | src/cmd/compile/internal/gc/ssa.go | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/cmd/compile/internal/gc/ssa.go b/src/cmd/compile/internal/gc/ssa.go index 7d362fb311..1f0f1b0d91 100644 --- a/src/cmd/compile/internal/gc/ssa.go +++ b/src/cmd/compile/internal/gc/ssa.go @@ -1956,6 +1956,15 @@ func (s *state) expr(n *Node) *ssa.Value { v := s.expr(n.Left) return s.newValue1I(ssa.OpStructSelect, n.Type, int64(fieldIdx(n)), v) } + if n.Left.Op == OSTRUCTLIT { + // All literals with nonzero fields have already been + // rewritten during walk. Any that remain are just T{} + // or equivalents. Use the zero value. + if !iszero(n.Left) { + Fatalf("literal with nonzero value in SSA: %v", n.Left) + } + return s.zeroVal(n.Type) + } p, _ := s.addr(n, false) return s.newValue2(ssa.OpLoad, n.Type, p, s.mem()) |
