From 9d4623fe43f121bd98cdb78f207aa12bfc68dbc2 Mon Sep 17 00:00:00 2001 From: Josh Bleecher Snyder Date: Wed, 1 Jun 2016 11:07:05 -0700 Subject: [PATCH] cmd/compile: handle OCONV[NOP] in samesafeexpr 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 Reviewed-by: Matthew Dempsky TryBot-Result: Gobot Gobot --- src/cmd/compile/internal/gc/typecheck.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/cmd/compile/internal/gc/typecheck.go b/src/cmd/compile/internal/gc/typecheck.go index c3af650a6b..0bda4e046b 100644 --- a/src/cmd/compile/internal/gc/typecheck.go +++ b/src/cmd/compile/internal/gc/typecheck.go @@ -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) -- 2.48.1