]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: convert untyped bool during walkCases
authorMichael Fraenkel <michael.fraenkel@gmail.com>
Sun, 25 Feb 2018 19:26:24 +0000 (14:26 -0500)
committerMatthew Dempsky <mdempsky@google.com>
Tue, 27 Feb 2018 23:26:36 +0000 (23:26 +0000)
Updates #23834.

Change-Id: I1789525a992d37aae9e9b69c1e9d91437d3d0d3b
Reviewed-on: https://go-review.googlesource.com/97001
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
src/cmd/compile/internal/gc/swt.go

index 8d425506d3407bc278bc29962ed822d106d20fa1..f4be8a7f261b2e3e1ab4a8e1543e48b1fb4c78bd 100644 (file)
@@ -315,16 +315,19 @@ func (s *exprSwitch) walkCases(cc []caseClause) *Node {
                                high := nod(OLE, s.exprname, rng[1])
                                a.Left = nod(OANDAND, low, high)
                                a.Left = typecheck(a.Left, Erv)
+                               a.Left = defaultlit(a.Left, nil)
                                a.Left = walkexpr(a.Left, nil) // give walk the opportunity to optimize the range check
                        } else if (s.kind != switchKindTrue && s.kind != switchKindFalse) || assignop(n.Left.Type, s.exprname.Type, nil) == OCONVIFACE || assignop(s.exprname.Type, n.Left.Type, nil) == OCONVIFACE {
                                a.Left = nod(OEQ, s.exprname, n.Left) // if name == val
                                a.Left = typecheck(a.Left, Erv)
+                               a.Left = defaultlit(a.Left, nil)
                        } else if s.kind == switchKindTrue {
                                a.Left = n.Left // if val
                        } else {
                                // s.kind == switchKindFalse
                                a.Left = nod(ONOT, n.Left, nil) // if !val
                                a.Left = typecheck(a.Left, Erv)
+                               a.Left = defaultlit(a.Left, nil)
                        }
                        a.Nbody.Set1(n.Right) // goto l
 
@@ -354,6 +357,7 @@ func (s *exprSwitch) walkCases(cc []caseClause) *Node {
                a.Left = le
        }
        a.Left = typecheck(a.Left, Erv)
+       a.Left = defaultlit(a.Left, nil)
        a.Nbody.Set1(s.walkCases(cc[:half]))
        a.Rlist.Set1(s.walkCases(cc[half:]))
        return a