]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: remove pointer arithmetic
authorMatthew Dempsky <mdempsky@google.com>
Mon, 6 Nov 2017 22:41:06 +0000 (14:41 -0800)
committerMatthew Dempsky <mdempsky@google.com>
Thu, 4 Oct 2018 04:07:53 +0000 (04:07 +0000)
Change-Id: Ie4bab0b74d5a4e1aecd8501a48176b2e9a3d8c42
Reviewed-on: https://go-review.googlesource.com/c/76311
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Robert Griesemer <gri@golang.org>
src/cmd/compile/internal/gc/range.go
src/cmd/compile/internal/gc/ssa.go

index 13f45e164dfcbec0a67fbb0f83296db43a4cb061..ac03cc5ea7dac2133d8c14e84017b452f8501c2b 100644 (file)
@@ -286,13 +286,7 @@ func walkrange(n *Node) *Node {
                // This runs *after* the condition check, so we know
                // advancing the pointer is safe and won't go past the
                // end of the allocation.
-               tmp = nod(OADD, hp, nodintconst(t.Elem().Width))
-
-               tmp.Type = hp.Type
-               tmp.SetTypecheck(1)
-               tmp.Right.Type = types.Types[types.Tptr]
-               tmp.Right.SetTypecheck(1)
-               a = nod(OAS, hp, tmp)
+               a = nod(OAS, hp, addptr(hp, t.Elem().Width))
                a = typecheck(a, Etop)
                n.List.Set1(a)
 
@@ -613,3 +607,18 @@ func arrayClear(n, v1, v2, a *Node) bool {
        n = walkstmt(n)
        return true
 }
+
+// addptr returns (*T)(uintptr(p) + n).
+func addptr(p *Node, n int64) *Node {
+       t := p.Type
+
+       p = nod(OCONVNOP, p, nil)
+       p.Type = types.Types[TUINTPTR]
+
+       p = nod(OADD, p, nodintconst(n))
+
+       p = nod(OCONVNOP, p, nil)
+       p.Type = t
+
+       return p
+}
index 138ce08feca8f460a5586cf15a24e59bb1fa1776..2b67ef9a6f3a72dbe90f387aef863a7573882ff8 100644 (file)
@@ -1247,10 +1247,8 @@ var opToSSA = map[opAndType]ssa.Op{
        opAndType{OADD, TUINT16}:  ssa.OpAdd16,
        opAndType{OADD, TINT32}:   ssa.OpAdd32,
        opAndType{OADD, TUINT32}:  ssa.OpAdd32,
-       opAndType{OADD, TPTR32}:   ssa.OpAdd32,
        opAndType{OADD, TINT64}:   ssa.OpAdd64,
        opAndType{OADD, TUINT64}:  ssa.OpAdd64,
-       opAndType{OADD, TPTR64}:   ssa.OpAdd64,
        opAndType{OADD, TFLOAT32}: ssa.OpAdd32F,
        opAndType{OADD, TFLOAT64}: ssa.OpAdd64F,