aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/walk/complit.go
diff options
context:
space:
mode:
authorDmitri Shuralyov <dmitshur@google.com>2022-08-01 15:54:13 +0000
committerDmitri Shuralyov <dmitshur@google.com>2022-08-01 15:54:13 +0000
commit349da2d42d3193af7f54170ae842166e4571134a (patch)
treea0b59dc2dfa4440add9d954efe1908272933247a /src/cmd/compile/internal/walk/complit.go
parent7d5078e3bf2d865526e8ec2d211f61b2fac2936f (diff)
parent15da892a4950a4caac987ee72c632436329f62d5 (diff)
downloadgo-349da2d42d3193af7f54170ae842166e4571134a.tar.gz
go-349da2d42d3193af7f54170ae842166e4571134a.zip
[dev.boringcrypto.go1.17] all: merge go1.17.13 into dev.boringcrypto.go1.17dev.boringcrypto.go1.17
Change-Id: Iaf4f2cb506aab9e22a5df5b937c38fc108f1e1c1
Diffstat (limited to 'src/cmd/compile/internal/walk/complit.go')
-rw-r--r--src/cmd/compile/internal/walk/complit.go8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/cmd/compile/internal/walk/complit.go b/src/cmd/compile/internal/walk/complit.go
index abd920d646..1f288d21c1 100644
--- a/src/cmd/compile/internal/walk/complit.go
+++ b/src/cmd/compile/internal/walk/complit.go
@@ -621,6 +621,12 @@ func oaslit(n *ir.AssignStmt, init *ir.Nodes) bool {
// not a special composite literal assignment
return false
}
+ if x.Addrtaken() {
+ // If x is address-taken, the RHS may (implicitly) uses LHS.
+ // Not safe to do a special composite literal assignment
+ // (which may expand to multiple assignments).
+ return false
+ }
switch n.Y.Op() {
default:
@@ -629,7 +635,7 @@ func oaslit(n *ir.AssignStmt, init *ir.Nodes) bool {
case ir.OSTRUCTLIT, ir.OARRAYLIT, ir.OSLICELIT, ir.OMAPLIT:
if ir.Any(n.Y, func(y ir.Node) bool { return ir.Uses(y, x) }) {
- // not a special composite literal assignment
+ // not safe to do a special composite literal assignment if RHS uses LHS.
return false
}
anylit(n.Y, n.X, init)