From: Matthew Dempsky Date: Mon, 25 Jan 2021 22:14:10 +0000 (-0800) Subject: [dev.regabi] cmd/compile: disallow taking address of SSA'd values X-Git-Tag: go1.17beta1~1539^2~48 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=7eaaf28cae;p=gostls13.git [dev.regabi] cmd/compile: disallow taking address of SSA'd values Adds some extra validation that the frontend is setting flags like Addrtaken correctly. Change-Id: Iffde83e32ba1c4c917ab8cb3fe410a4f623cf635 Reviewed-on: https://go-review.googlesource.com/c/go/+/286434 Run-TryBot: Matthew Dempsky TryBot-Result: Go Bot Trust: Matthew Dempsky Reviewed-by: Keith Randall --- diff --git a/src/cmd/compile/internal/ssagen/ssa.go b/src/cmd/compile/internal/ssagen/ssa.go index ecf3294082..e49a9716fe 100644 --- a/src/cmd/compile/internal/ssagen/ssa.go +++ b/src/cmd/compile/internal/ssagen/ssa.go @@ -434,6 +434,7 @@ func buildssa(fn *ir.Func, worker int) *ssa.Func { // bitmask showing which of the open-coded defers in this function // have been activated. deferBitsTemp := typecheck.TempAt(src.NoXPos, s.curfn, types.Types[types.TUINT8]) + deferBitsTemp.SetAddrtaken(true) s.deferBitsTemp = deferBitsTemp // For this value, AuxInt is initialized to zero by default startDeferBits := s.entryNewValue0(ssa.OpConst8, types.Types[types.TUINT8]) @@ -5086,6 +5087,10 @@ func (s *state) addr(n ir.Node) *ssa.Value { defer s.popLine() } + if s.canSSA(n) { + s.Fatalf("addr of canSSA expression: %+v", n) + } + t := types.NewPtr(n.Type()) linksymOffset := func(lsym *obj.LSym, offset int64) *ssa.Value { v := s.entryNewValue1A(ssa.OpAddr, t, lsym, s.sb)