]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: allow noop conversions when comparing expressions
authorKeith Randall <khr@golang.org>
Wed, 16 Mar 2022 16:24:06 +0000 (09:24 -0700)
committerKeith Randall <khr@golang.org>
Wed, 16 Mar 2022 23:03:54 +0000 (23:03 +0000)
Allows mapclear optimization to trigger in more cases, including
some generic instantiations.

Fixes #51699

Change-Id: Ic54f7686e5fcb8fbcad640aa77ed326d7338b938
Reviewed-on: https://go-review.googlesource.com/c/go/+/393434
Trust: Keith Randall <khr@golang.org>
Run-TryBot: Keith Randall <khr@golang.org>
Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
TryBot-Result: Gopher Robot <gobot@golang.org>

src/cmd/compile/internal/ir/expr.go

index ebb84ad78fbf009ddc5071437711c57d765ec4cd..ff3cc8ed6e7622fdc4ff280ca4b29c3830c35eb6 100644 (file)
@@ -973,6 +973,12 @@ var IsIntrinsicCall = func(*CallExpr) bool { return false }
 // lvalue expression is for OSLICE and OAPPEND optimizations, and it
 // is correct in those settings.
 func SameSafeExpr(l Node, r Node) bool {
+       for l.Op() == OCONVNOP {
+               l = l.(*ConvExpr).X
+       }
+       for r.Op() == OCONVNOP {
+               r = r.(*ConvExpr).X
+       }
        if l.Op() != r.Op() || !types.Identical(l.Type(), r.Type()) {
                return false
        }
@@ -996,11 +1002,6 @@ func SameSafeExpr(l Node, r Node) bool {
                r := r.(*UnaryExpr)
                return SameSafeExpr(l.X, r.X)
 
-       case OCONVNOP:
-               l := l.(*ConvExpr)
-               r := r.(*ConvExpr)
-               return SameSafeExpr(l.X, r.X)
-
        case OCONV:
                l := l.(*ConvExpr)
                r := r.(*ConvExpr)