]> Cypherpunks repositories - gostls13.git/commit
runtime: make convTstring write barrier unreachable from throw
authorAlan Donovan <adonovan@google.com>
Thu, 9 May 2024 22:16:59 +0000 (18:16 -0400)
committerAlan Donovan <adonovan@google.com>
Wed, 15 May 2024 17:29:46 +0000 (17:29 +0000)
commitbf0b605dfbc36b3555eef3315b15facca1c08bdb
tree5cb241b240181f29d7a532a5c8b2fefaccaa4f9e
parent90b15211382ca10bd3256b17a6d9cc02da169d6a
runtime: make convTstring write barrier unreachable from throw

CL 581215 changed 'throw' so that instead of print(s) it called
a more complicated function, printpanicval, that statically
appeared to have convTstring in its call graph, even though this
isn't dynamically reachable when called with a string argument.

However, this caused the link-time static callgraph test to point
out that throw (which is called in nowritebarrierrec contexts
such as markgc) reaches a write barrier.

The solution is to inline and specialize the printpanicval
function for strings; it reduces to printindented.

Thanks to mpratt for pointing out that the reachability
check is on the fully lowered code, and is thus sensitive
to optimizations such as inlining.
I added an explanatory comment on the line that generates
the error message to help future users confused as I was.

Fixes golang/go#67274

Change-Id: Ief110d554de365ce4c09509dceee000cbee30ad9
Reviewed-on: https://go-review.googlesource.com/c/go/+/584617
Reviewed-by: Than McIntosh <thanm@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Michael Pratt <mpratt@google.com>
src/cmd/compile/internal/ssagen/nowb.go
src/runtime/panic.go