diff --git a/src/cmd/compile/internal/gc/ssa.go b/src/cmd/compile/internal/gc/ssa.go index 24cb200175c863..b8e99f08c547a7 100644 --- a/src/cmd/compile/internal/gc/ssa.go +++ b/src/cmd/compile/internal/gc/ssa.go @@ -347,10 +347,6 @@ func buildssa(fn *Node, worker int) *ssa.Func { // preceding the deferreturn/ret code that is generated by gencallret() // that we don't track correctly. s.hasOpenDefers = false - case thearch.LinkArch.Name == "riscv64": - // The use of open-coded defers is currently broken on riscv64, - // hence disable it for now - see issue golang.org/issue/36786 - s.hasOpenDefers = false } if s.hasOpenDefers && s.curfn.Func.Exit.Len() > 0 { // Skip doing open defers if there is any extra exit code (likely diff --git a/src/cmd/link/internal/ld/pcln.go b/src/cmd/link/internal/ld/pcln.go index ab703e94ee3b52..7cba9bde6d1eb9 100644 --- a/src/cmd/link/internal/ld/pcln.go +++ b/src/cmd/link/internal/ld/pcln.go @@ -266,8 +266,13 @@ func (ctxt *Link) pclntab() { switch ctxt.Arch.Family { case sys.AMD64, sys.I386: deferreturn-- - case sys.PPC64, sys.ARM, sys.ARM64, sys.MIPS, sys.MIPS64, sys.RISCV64: + case sys.PPC64, sys.ARM, sys.ARM64, sys.MIPS, sys.MIPS64: // no change + case sys.RISCV64: + // TODO(jsing): The JALR instruction is marked with + // R_CALLRISCV, whereas the actual reloc is currently + // two instructions earlier for the AUIPC+AADI sequence. + deferreturn -= 8 case sys.S390X: deferreturn -= 2 default: diff --git a/test/live.go b/test/live.go index 02e0fd51e524b3..3df7ab01af47f6 100644 --- a/test/live.go +++ b/test/live.go @@ -1,13 +1,9 @@ // errorcheckwithauto -0 -l -live -wb=0 -d=ssa/insert_resched_checks/off -// +build !ppc64,!ppc64le,!riscv64 +// +build !ppc64,!ppc64le // ppc64 needs a better tighten pass to make f18 pass // rescheduling checks need to be turned off because there are some live variables across the inserted check call -// TODO(jsing): these tests assume that open-coded defers are enabled, -// which is not currently the case on riscv64. Re-enable this test once -// open-coded defers are available - golang.org/issues/36786. - // Copyright 2014 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.