summaryrefslogtreecommitdiff
path: root/test/live.go
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2014-02-13 20:59:39 -0500
committerRuss Cox <rsc@golang.org>2014-02-13 20:59:39 -0500
commite0ed119d47728176de20aedeb519e6b470e7e411 (patch)
treeeaaf55c2dd390512ef6c54ada8e4bab5b7c83842 /test/live.go
parent627d914dff9f9b31d835a6aaa57073364c13638a (diff)
downloadgo-e0ed119d47728176de20aedeb519e6b470e7e411.tar.gz
cmd/gc: distinguish unnamed vs blank-named return variables better
Before, an unnamed return value turned into an ONAME node n with n->sym named ~anon%d, and n->orig == n. A blank-named return value turned into an ONAME node n with n->sym named ~anon%d but n->orig == the original blank n. Code generation and printing uses n->orig, so that this node formatted as _. But some code does not use n->orig. In particular the liveness code does not know about the n->orig convention and so mishandles blank identifiers. It is possible to fix but seemed better to avoid the confusion entirely. Now the first kind of node is named ~r%d and the second ~b%d; both have n->orig == n, so that it doesn't matter whether code uses n or n->orig. After this change the ->orig field is only used for other kinds of expressions, not for ONAME nodes. This requires distinguishing ~b from ~r names in a few places that care. It fixes a liveness analysis bug without actually changing the liveness code. TBR=ken2 CC=golang-codereviews https://codereview.appspot.com/63630043
Diffstat (limited to 'test/live.go')
-rw-r--r--test/live.go7
1 files changed, 7 insertions, 0 deletions
diff --git a/test/live.go b/test/live.go
index dc2ec86fd..c0ea13129 100644
--- a/test/live.go
+++ b/test/live.go
@@ -79,3 +79,10 @@ func f5(b1 bool) {
}
print(**z) // ERROR "live at call to printint: x y$"
}
+
+// confusion about the _ result used to cause spurious "live at entry to f6: _".
+
+func f6() (_, y string) {
+ y = "hello"
+ return
+}