go/analysis/passes/asmdecl: Correct identify writeResult instructions This CL ensure all occurrences of writeResult instructions are identified, not just those at the beginning of the line without indentation. This CL also fixes this and changed testcases to match other ABIInternal test. Change-Id: I1ce6ea22a227902819dc4e0caafa4bace79c15fe Reviewed-on: https://go-review.googlesource.com/c/tools/+/620056 Reviewed-by: Cherry Mui <cherryyz@google.com> Reviewed-by: Carlos Amedee <carlos@golang.org> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
diff --git a/go/analysis/passes/asmdecl/asmdecl.go b/go/analysis/passes/asmdecl/asmdecl.go index 92671ca..b622dfd 100644 --- a/go/analysis/passes/asmdecl/asmdecl.go +++ b/go/analysis/passes/asmdecl/asmdecl.go
@@ -354,7 +354,7 @@ if abi == "ABIInternal" && !haveRetArg { for _, ins := range archDef.writeResult { - if strings.HasPrefix(line, ins) { + if strings.Contains(line, ins) { haveRetArg = true break }
diff --git a/go/analysis/passes/asmdecl/testdata/src/a/asm.go b/go/analysis/passes/asmdecl/testdata/src/a/asm.go index 7569d19..077201d 100644 --- a/go/analysis/passes/asmdecl/testdata/src/a/asm.go +++ b/go/analysis/passes/asmdecl/testdata/src/a/asm.go
@@ -30,7 +30,6 @@ func returnbyte(x int) byte func returnnamed(x byte) (r1 int, r2 int16, r3 string, r4 byte) func returnintmissing() int -func returnsyscall() func leaf(x, y int) int func noprof(x int) @@ -55,5 +54,6 @@ func returnABIInternal() int func returnmissingABIInternal() int +func returnsyscallABIInternal() int func retjmp() int
diff --git a/go/analysis/passes/asmdecl/testdata/src/a/asm1.s b/go/analysis/passes/asmdecl/testdata/src/a/asm1.s index 9f17a03..ff951c7 100644 --- a/go/analysis/passes/asmdecl/testdata/src/a/asm1.s +++ b/go/analysis/passes/asmdecl/testdata/src/a/asm1.s
@@ -354,7 +354,7 @@ RET // want `RET without writing to result register` // issue 69352 -TEXT ·returnsyscall<ABIInternal>(SB),0,$0-0 +TEXT ·returnsyscallABIInternal<ABIInternal>(SB), NOSPLIT, $0 MOVQ $123, CX SYSCALL RET
diff --git a/go/analysis/passes/asmdecl/testdata/src/a/asm11.s b/go/analysis/passes/asmdecl/testdata/src/a/asm11.s index 3e3f5a3..7086713 100644 --- a/go/analysis/passes/asmdecl/testdata/src/a/asm11.s +++ b/go/analysis/passes/asmdecl/testdata/src/a/asm11.s
@@ -13,7 +13,7 @@ RET // want `RET without writing to result register` // issue 69352 -TEXT ·returnsyscall<ABIInternal>(SB),0,$0-0 +TEXT ·returnsyscallABIInternal<ABIInternal>(SB), NOSPLIT, $0 MOV $123, X20 ECALL RET
diff --git a/go/analysis/passes/asmdecl/testdata/src/a/asm7.s b/go/analysis/passes/asmdecl/testdata/src/a/asm7.s index 28bca66..db00bda 100644 --- a/go/analysis/passes/asmdecl/testdata/src/a/asm7.s +++ b/go/analysis/passes/asmdecl/testdata/src/a/asm7.s
@@ -200,7 +200,7 @@ RET // want `RET without writing to result register` // issue 69352 -TEXT ·returnsyscall<ABIInternal>(SB),0,$0-0 +TEXT ·returnsyscallABIInternal<ABIInternal>(SB), NOSPLIT, $0 MOVD $123, R10 SYSCALL RET