• Russ Cox's avatar
    cmd/gc: correct liveness for wrappers containing tail jumps · 02ae91f3
    Russ Cox authored
    A normal RET is treated as using the return values,
    but a tail jump RET does not - it is jumping to the
    function that is going to fill in the return values.
    If a tail jump RET is recorded as using the return values,
    since nothing initializes them they will be marked as
    live on entry to the function, which is clearly wrong.
    
    Found and tested by the new code in plive.c that looks
    for variables that are incorrectly live on entry.
    That code is disabled for now because there are other
    cases remaining to be fixed. But once it is enabled,
    test/live1.go becomes a real test of this CL.
    
    TBR=iant
    CC=golang-codereviews
    https://golang.org/cl/63570045
    02ae91f3
plive.c 51.6 KB