Description
Off-shoot from #103799. Currently NO_CLASS eightbytes are reclassified as INTEGER:
runtime/src/coreclr/vm/methodtable.cpp
Lines 2683 to 2700 in 131a3c5
System V ABI does not allow such reclassification, NO_CLASS eightbytes are valid for passing to a function. The difference is an INTEGER eightbyte gets assigned an integer argument register for passing; a NO_CLASS eightbyte doesn't get any register assigned. So the reclassification causes a mismatch for subsequent integer arguments.
Note: there's a silent requirement that .NET structs with explicit layouts or manually defined sizes have 'significant' padding. Care should be taken to preserve such padding to maintain backwards compatibility. More in #71711 discussion.
cc @dotnet/samsung