Skip to content

Commit

Permalink
cmd/compile: use call block instead of entry block for tail call expa…
Browse files Browse the repository at this point in the history
…nsion

The expand-calls pass assumed that tail calls were always done in the
entry block. That used to be true, but with tail calls in wrappers
(enabled by CL 578235) and libfuzzer instrumentation, that is no
longer the case. Libfuzzer instrumentation adds an IF statement to the
start of the wrapper function.

Fixes #69825

Change-Id: I9ab7133691d8235f9df128be39bff154b0b8853b
Reviewed-on: https://go-review.googlesource.com/c/go/+/619075
Reviewed-by: Cuong Manh Le <[email protected]>
LUCI-TryBot-Result: Go LUCI <[email protected]>
Reviewed-by: David Chase <[email protected]>
Reviewed-by: Keith Randall <[email protected]>
  • Loading branch information
randall77 committed Oct 9, 2024
1 parent 935bf13 commit 5428570
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/cmd/compile/internal/ssa/expand_calls.go
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,7 @@ func (x *expandState) rewriteCallArgs(v *Value, firstArg int) {
if v.Op == OpTailLECall {
// For tail call, we unwind the frame before the call so we'll use the caller's
// SP.
sp = x.f.Entry.NewValue1(src.NoXPos, OpGetCallerSP, x.typs.Uintptr, mem)
sp = v.Block.NewValue1(src.NoXPos, OpGetCallerSP, x.typs.Uintptr, mem)
}

for i, a := range argsWithoutMem { // skip leading non-parameter SSA Args and trailing mem SSA Arg.
Expand Down
18 changes: 18 additions & 0 deletions test/fixedbugs/issue69825.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// compile -d=libfuzzer

// Copyright 2024 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package main

type T struct {
A
}

type A struct {
}

//go:noinline
func (a *A) Foo(s [2]string) {
}

0 comments on commit 5428570

Please sign in to comment.