diff --git a/go/analysis/passes/asmdecl/asmdecl.go b/go/analysis/passes/asmdecl/asmdecl.go index 53117efd..dce1ef7b 100644 --- a/go/analysis/passes/asmdecl/asmdecl.go +++ b/go/analysis/passes/asmdecl/asmdecl.go @@ -490,7 +490,7 @@ func appendComponentsRecursive(arch *asmArch, t types.Type, cc []component, suff offsets := arch.sizes.Offsetsof(fields) elemoff := int(offsets[1]) for i := 0; i < int(tu.Len()); i++ { - cc = appendComponentsRecursive(arch, elem, cc, suffix+"_"+strconv.Itoa(i), i*elemoff) + cc = appendComponentsRecursive(arch, elem, cc, suffix+"_"+strconv.Itoa(i), off+i*elemoff) } } diff --git a/go/analysis/passes/asmdecl/testdata/src/a/asm.go b/go/analysis/passes/asmdecl/testdata/src/a/asm.go index 661e1a9f..ebe5d33c 100644 --- a/go/analysis/passes/asmdecl/testdata/src/a/asm.go +++ b/go/analysis/passes/asmdecl/testdata/src/a/asm.go @@ -41,6 +41,7 @@ func wrapper(x int) func f15271() (x uint32) func f17584(x float32, y complex64) +func f29318(x [2][2]uint64) func noframe1(x int32) func noframe2(x int32) diff --git a/go/analysis/passes/asmdecl/testdata/src/a/asm1.s b/go/analysis/passes/asmdecl/testdata/src/a/asm1.s index 60538e5c..4fa31a26 100644 --- a/go/analysis/passes/asmdecl/testdata/src/a/asm1.s +++ b/go/analysis/passes/asmdecl/testdata/src/a/asm1.s @@ -312,3 +312,9 @@ TEXT ·f17584(SB), NOSPLIT, $12 MOVSS y_real+4(FP), X0 MOVSS y_imag+8(FP), X0 RET + +// issue 29318 +TEXT ·f29318(SB), NOSPLIT, $32 + MOVQ x_0_1+8(FP), AX + MOVQ x_1_1+24(FP), CX + RET