]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: handle OCONV[NOP] in samesafeexpr
authorJosh Bleecher Snyder <josharian@gmail.com>
Wed, 1 Jun 2016 18:07:05 +0000 (11:07 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Wed, 24 Aug 2016 22:31:16 +0000 (22:31 +0000)
This increases the effectiveness of the
"integer-in-range" CL that follows.

Change-Id: I23b7b6809f0b2c25ed1d59dd2d5429c30f1db89c
Reviewed-on: https://go-review.googlesource.com/27651
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/typecheck.go

index c3af650a6b44971b1176bf3b7db6be27314f97cc..0bda4e046bb3c89c5b3ae9a2af2dba19cf2cd7bc 100644 (file)
@@ -3186,9 +3186,14 @@ func samesafeexpr(l *Node, r *Node) bool {
        case ODOT, ODOTPTR:
                return l.Sym != nil && r.Sym != nil && l.Sym == r.Sym && samesafeexpr(l.Left, r.Left)
 
-       case OIND:
+       case OIND, OCONVNOP:
                return samesafeexpr(l.Left, r.Left)
 
+       case OCONV:
+               // Some conversions can't be reused, such as []byte(str).
+               // Allow only numeric-ish types. This is a bit conservative.
+               return issimple[l.Type.Etype] && samesafeexpr(l.Left, r.Left)
+
        case OINDEX:
                return samesafeexpr(l.Left, r.Left) && samesafeexpr(l.Right, r.Right)