• Russ Cox's avatar
    cmd/gc: fix x=x crash · 89d46fed
    Russ Cox authored
    [Same as CL 102820043 except applied changes to 6g/gsubr.c
    also to 5g/gsubr.c and 8g/gsubr.c. The problem I had last night
    trying to do that was that 8g's copy of nodarg has different
    (but equivalent) control flow and I was pasting the new code
    into the wrong place.]
    
    Description from CL 102820043:
    
    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=khr
    R=golang-codereviews, khr
    CC=golang-codereviews, iant, khr, r
    https://golang.org/cl/103750043
    89d46fed
Name
Last commit
Last update
api Loading commit data...
doc Loading commit data...
include Loading commit data...
lib Loading commit data...
misc Loading commit data...
src Loading commit data...
test Loading commit data...
.hgignore Loading commit data...
.hgtags Loading commit data...
AUTHORS Loading commit data...
CONTRIBUTORS Loading commit data...
LICENSE Loading commit data...
PATENTS Loading commit data...
README Loading commit data...
favicon.ico Loading commit data...
robots.txt Loading commit data...