mirror of
https://github.com/golang/go
synced 2024-11-14 13:20:30 -07:00
8668d7bbb9
CL 594596 already did this for regabi, but missed non-regabi. Stack allocated swiss maps don't call rand32. For #54766. Change-Id: I312ea77532ecc6fa860adfea58ea00b01683ca69 Reviewed-on: https://go-review.googlesource.com/c/go/+/621615 Reviewed-by: Keith Randall <khr@golang.org> Auto-Submit: Michael Pratt <mpratt@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Keith Randall <khr@google.com>
64 lines
2.0 KiB
Go
64 lines
2.0 KiB
Go
// errorcheckwithauto -0 -l -live -wb=0 -d=ssa/insert_resched_checks/off
|
|
|
|
//go:build goexperiment.swissmap && !goexperiment.regabiargs
|
|
|
|
// For register ABI, liveness info changes slightly. See live_regabi.go.
|
|
|
|
// 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.
|
|
|
|
// swissmap-specific tests for live.go
|
|
// TODO(#54766): temporary while fast variants are disabled.
|
|
|
|
package main
|
|
|
|
// str is used to ensure that a temp is required for runtime calls below.
|
|
func str() string
|
|
|
|
var b bool
|
|
var m2 map[[2]string]*byte
|
|
var m2s map[string]*byte
|
|
var x2 [2]string
|
|
|
|
func f17b(p *byte) { // ERROR "live at entry to f17b: p$"
|
|
// key temporary
|
|
if b {
|
|
// TODO(go.dev/issue/54766): There is an extra autotmp here vs old maps.
|
|
m2s[str()] = p // ERROR "live at call to mapassign: p$" "live at call to str: p$" "stack object .autotmp_[0-9]+ string$"
|
|
}
|
|
m2s[str()] = p // ERROR "live at call to mapassign: p$" "live at call to str: p$"
|
|
m2s[str()] = p // ERROR "live at call to mapassign: p$" "live at call to str: p$"
|
|
}
|
|
|
|
func f17c() {
|
|
// key and value temporaries
|
|
if b {
|
|
// TODO(go.dev/issue/54766): There is an extra autotmp here vs old maps.
|
|
m2s[str()] = f17d() // ERROR "live at call to f17d: .autotmp_[0-9]+$" "live at call to mapassign: .autotmp_[0-9]+$" "stack object .autotmp_[0-9]+ string$"
|
|
}
|
|
m2s[str()] = f17d() // ERROR "live at call to f17d: .autotmp_[0-9]+$" "live at call to mapassign: .autotmp_[0-9]+$"
|
|
m2s[str()] = f17d() // ERROR "live at call to f17d: .autotmp_[0-9]+$" "live at call to mapassign: .autotmp_[0-9]+$"
|
|
}
|
|
|
|
func f17d() *byte
|
|
|
|
func printnl()
|
|
|
|
type T40 struct {
|
|
m map[int]int
|
|
}
|
|
|
|
//go:noescape
|
|
func useT40(*T40)
|
|
|
|
func good40() {
|
|
ret := T40{} // ERROR "stack object ret T40$"
|
|
ret.m = make(map[int]int) // ERROR "stack object .autotmp_[0-9]+ internal/runtime/maps.Map$"
|
|
t := &ret
|
|
printnl() // ERROR "live at call to printnl: ret$"
|
|
// Note: ret is live at the printnl because the compiler moves &ret
|
|
// from before the printnl to after.
|
|
useT40(t)
|
|
}
|