• Keith Randall's avatar
    runtime: redo stack map entries to avoid false retention · 1b45cc45
    Keith Randall authored
    Change two-bit stack map entries to encode:
    0 = dead
    1 = scalar
    2 = pointer
    3 = multiword
    
    If multiword, the two-bit entry for the following word encodes:
    0 = string
    1 = slice
    2 = iface
    3 = eface
    
    That way, during stack scanning we can check if a string
    is zero length or a slice has zero capacity.  We can avoid
    following the contained pointer in those cases.  It is safe
    to do so because it can never be dereferenced, and it is
    desirable to do so because it may cause false retention
    of the following block in memory.
    
    Slice feature turned off until issue 7564 is fixed.
    
    Update #7549
    
    LGTM=rsc
    R=golang-codereviews, bradfitz, rsc
    CC=golang-codereviews
    https://golang.org/cl/76380043
    1b45cc45
extern.go 8.75 KB