• Russ Cox's avatar
    cmd/gc: fix x=x crash · 948b2c72
    Russ Cox authored
    The 'nodarg' function is used to obtain a Node*
    representing a function argument or result.
    It returned a brand new Node*, but that violates
    the guarantee in most places in the compiler that
    two Node*s refer to the same variable if and only if
    they are the same Node* pointer. Reestablish that
    invariant by making nodarg return a preexisting
    named variable if present.
    
    Having fixed that, avoid any copy during x=x in
    componentgen, because the VARDEF we emit
    before the copy marks the lhs x as dead incorrectly.
    
    The change in walk.c avoids modifying the result
    of nodarg. This was the only place in the compiler
    that did so.
    
    Fixes #8097.
    
    LGTM=r, khr
    R=golang-codereviews, r, khr
    CC=golang-codereviews, iant
    https://golang.org/cl/102820043
    948b2c72
walk.c 80.9 KB