• 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
..
5a Loading commit data...
5c Loading commit data...
5g Loading commit data...
5l Loading commit data...
6a Loading commit data...
6c Loading commit data...
6g Loading commit data...
6l Loading commit data...
8a Loading commit data...
8c Loading commit data...
8g Loading commit data...
8l Loading commit data...
addr2line Loading commit data...
api Loading commit data...
cc Loading commit data...
cgo Loading commit data...
dist Loading commit data...
fix Loading commit data...
gc Loading commit data...
go Loading commit data...
gofmt Loading commit data...
ld Loading commit data...
link Loading commit data...
nm Loading commit data...
objdump Loading commit data...
pack Loading commit data...
yacc Loading commit data...