• Matthew Dempsky's avatar
    cmd/internal/gc: statically initialize function pointers · 632217aa
    Matthew Dempsky authored
    Previously, gc would compile code like
    
        func foo() { ... }
        var bar = foo
    
    by emitting a static closure to wrap "foo", but then emitting runtime
    initialization code to assign the closure to "bar".  This CL changes
    gc to instead statically initialize "bar".
    
    Notably, this change shrinks the "go" tool's text segment by ~7.4kB on
    linux/amd64 while only increasing the data segment by ~100B:
    
       text	   data	    bss	    dec	    hex	filename
    7237819	 122412	 215616	7575847	 739927	go.before
    7230398	 122540	 215232	7568170	 737b2a	go.after
    
    Fixes issue #10081.
    
    Change-Id: If5e26cf46b323393ba6f2199a82a06e9e4baf411
    Reviewed-on: https://go-review.googlesource.com/6880
    Run-TryBot: Matthew Dempsky <mdempsky@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: default avatarKeith Randall <khr@golang.org>
    632217aa
sinit.go 28.2 KB