mirror of
https://github.com/golang/go
synced 2024-09-30 07:18:34 -06:00
cmd/compile: avoid an assignment of n.Type in walk
In the future, walk will probably run concurrently with SSA construction. It is possible for walk to be walking a function node that is referred to by another function undergoing SSA construction. In that case, this particular assignment to n.Type is race-y. This assignment is also not necessary; evconst does not change the type of n. Both arguments to evconst must have the same type, and at the end of evconst, n is replaced with n.Left. Remove the assignment, and add a check to ensure that its removal remains correct. Updates #15756 Change-Id: Id95faaff42d5abd76be56445d1d3e285775de8bf Reviewed-on: https://go-review.googlesource.com/38609 Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
5e954047bc
commit
26be4b9113
@ -1614,9 +1614,10 @@ opswitch:
|
|||||||
// walk of y%1 may have replaced it by 0.
|
// walk of y%1 may have replaced it by 0.
|
||||||
// Check whether n with its updated args is itself now a constant.
|
// Check whether n with its updated args is itself now a constant.
|
||||||
t := n.Type
|
t := n.Type
|
||||||
|
|
||||||
evconst(n)
|
evconst(n)
|
||||||
n.Type = t
|
if n.Type != t {
|
||||||
|
Fatalf("evconst changed Type: %v had type %v, now %v", n, t, n.Type)
|
||||||
|
}
|
||||||
if n.Op == OLITERAL {
|
if n.Op == OLITERAL {
|
||||||
n = typecheck(n, Erv)
|
n = typecheck(n, Erv)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user