• Josh Bleecher Snyder's avatar
    cmd/compile: add Type.WidthCalculated · 8dafdb1b
    Josh Bleecher Snyder authored
    Prior to this CL, Type.Width != 0 was the mark
    of a Type whose Width had been calculated.
    As a result, dowidth always recalculated
    the width of struct{}.
    This, combined with the prohibition on calculating
    the width of a FuncArgsStruct and the use of
    struct{} as a function argument,
    meant that there were circumstances in which
    it was forbidden to call dowidth on a type.
    This inhibits refactoring to call dowidth automatically,
    rather than explicitly.
    Instead add a helper method, Type.WidthCalculated,
    and implement as Type.Align > 0.
    Type.Width is not a good candidate for tracking
    whether the width has been calculated;
    0 is a value type width, and Width is subject to
    too much magic value game-playing.
    
    For good measure, add a test for #11354.
    
    Change-Id: Ie9a9fb5d924e7a2010c1904ae5e38ed4a38eaeb2
    Reviewed-on: https://go-review.googlesource.com/38468
    Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarMatthew Dempsky <mdempsky@google.com>
    8dafdb1b
issue11354.go 262 Bytes