• Keith Randall's avatar
    cmd/compile: don't mark argument array as noalg · 343b7fa6
    Keith Randall authored
    It ends up making two similar types, [N]uint8 of both
    alg and noalg varieties. Comparsions between the two then
    don't come out equal when they should.
    In particular, the type *[N]uint8 has an Elem pointer which
    must point to one of the above two types; it can't point to both.
    Thus allocating a *[N]uint8 and dereferencing it might be a
    different type than a [N]uint8.
    
    The fix is easy. Making a small test for this is really hard. It
    requires that both a argless defer and the test be imported by a
    common parent package. This is why a main binary doesn't see this
    issue, but a test does (as Agniva noticed), because there's a wrapper
    package that imports both the test and the defer.
    
    Types like [N]uint8 don't really need to be marked noalg anyway,
    as the generated code (if any) will be shared among all
    vanilla memory types of the same size.
    
    Fixes #32595
    
    Change-Id: If7b77fa6ed56cd4495601c3f90170682d853b82f
    Reviewed-on: https://go-review.googlesource.com/c/go/+/182357
    Run-TryBot: Keith Randall <khr@golang.org>
    Reviewed-by: default avatarEmmanuel Odeke <emm.odeke@gmail.com>
    Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    343b7fa6
a.go 203 Bytes