• Russ Cox's avatar
    cmd/gc: distinguish unnamed vs blank-named return variables better · a069cf04
    Russ Cox authored
    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://golang.org/cl/63630043
    a069cf04
escape5.go 3.36 KB