• Keith Randall's avatar
    reflect: fix more issues with StructOf GC programs · 9dc3b8b7
    Keith Randall authored
    First the insidious bug:
    
      var n uintptr
      for n := elemPtrs; n > 120; n -= 120 {
        prog = append(prog, 120)
        prog = append(prog, mask[:15]...)
        mask = mask[15:]
      }
      prog = append(prog, byte(n))
      prog = append(prog, mask[:(n+7)/8]...)
    
    The := breaks this code, because the n after the loop is always 0!
    
    We also do need to handle field padding correctly. In particular
    the old padding code doesn't correctly handle fields that are not
    a multiple of a pointer in size.
    
    Fixes #30606.
    
    Change-Id: Ifcab9494dc25c20116753c5d7e0145d6c2053ed8
    Reviewed-on: https://go-review.googlesource.com/c/go/+/165860
    Run-TryBot: Keith Randall <khr@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
    9dc3b8b7
type.go 86 KB