]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile/internal: loop opt
authorcui <cuiweixie@gmail.com>
Thu, 18 Feb 2021 17:51:24 +0000 (17:51 +0000)
committerRobert Griesemer <gri@golang.org>
Mon, 22 Feb 2021 22:55:23 +0000 (22:55 +0000)
Change-Id: I5fe767237b8046934e9b0f33bd3dafabdb727dd6
GitHub-Last-Rev: 94fea3d57279e8b2d62f7f6be4301698dc8841e3
GitHub-Pull-Request: golang/go#44384
Reviewed-on: https://go-review.googlesource.com/c/go/+/293809
Reviewed-by: Robert Griesemer <gri@golang.org>
Trust: Robert Griesemer <gri@golang.org>
Trust: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Robert Griesemer <gri@golang.org>
TryBot-Result: Go Bot <gobot@golang.org>

src/cmd/compile/internal/types/size.go

index d1203e4a219219e5345241d752e304c0c7c6bb31..799cf3a1f6a2e9d967d5b4d5db9265e476bb733f 100644 (file)
@@ -624,9 +624,11 @@ func PtrDataSize(t *Type) int64 {
        case TSTRUCT:
                // Find the last field that has pointers.
                var lastPtrField *Field
-               for _, t1 := range t.Fields().Slice() {
-                       if t1.Type.HasPointers() {
-                               lastPtrField = t1
+               fs := t.Fields().Slice()
+               for i := len(fs) - 1; i >= 0; i-- {
+                       if fs[i].Type.HasPointers() {
+                               lastPtrField = fs[i]
+                               break
                        }
                }
                return lastPtrField.Offset + PtrDataSize(lastPtrField.Type)