aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorCuong Manh Le <cuong.manhle.vn@gmail.com>2024-03-29 15:00:09 +0700
committerGopher Robot <gobot@golang.org>2024-03-29 16:46:47 +0000
commit9a028e14a535795a4783ce9e859a8649e903bfe9 (patch)
tree2e1c36fa067e83ec0ab5cf0135cc42ab42b7af5a /test
parent27c7a3dcc3327e265cf9ecd870eecb07a4408c36 (diff)
downloadgo-9a028e14a535795a4783ce9e859a8649e903bfe9.tar.gz
go-9a028e14a535795a4783ce9e859a8649e903bfe9.zip
cmd/compile: add missing OINLCAll case in mayModifyPkgVar
CL 395541 made staticopy safe, stop applying the optimization once seeing an expression that may modify global variables. However, if a call expression was inlined, the analyzer mis-recognizes and think that the expression is safe. For example: var x = 0 var a = f() var b = x are re-written to: var x = 0 var a = ~r0 var b = 0 even though it's not safe because "f()" may modify "x". Fixing this by recognizing OINLCALL and mark the initialization as not safe for staticopy. Fixes #66585 Change-Id: Id930c0b7e74274195f54a498cc4c5a91c4e6d84d Reviewed-on: https://go-review.googlesource.com/c/go/+/575175 Reviewed-by: Keith Randall <khr@google.com> Reviewed-by: Keith Randall <khr@golang.org> Auto-Submit: Cuong Manh Le <cuong.manhle.vn@gmail.com> Reviewed-by: Than McIntosh <thanm@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Diffstat (limited to 'test')
-rw-r--r--test/fixedbugs/issue66585.go25
1 files changed, 25 insertions, 0 deletions
diff --git a/test/fixedbugs/issue66585.go b/test/fixedbugs/issue66585.go
new file mode 100644
index 0000000000..fdadf59d63
--- /dev/null
+++ b/test/fixedbugs/issue66585.go
@@ -0,0 +1,25 @@
+// run
+
+// 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.
+
+package main
+
+var x = 0
+var a = foo()
+var b = x
+
+func foo() int {
+ x++
+ return x
+}
+
+func main() {
+ if a != 1 {
+ panic("unexpected a value")
+ }
+ if b != 1 {
+ panic("unexpected b value")
+ }
+}