Search Issue Tracker

Fixed

Fixed in 2021.3.18f1, 2022.2.5f1, 2023.1.0a26

Votes

0

Found in

2022.2.0b14

2023.1.0a18

Issue ID

UUM-19622

Regression

Yes

Marshal.OffsetOf returns invalid value in IL2CPP for misaligned fields on macOS

--

-

Marshal.OffsetOf returns invalid value in IL2CPP for misaligned fields on macOS, .NET 7.0/ Unity Mono return correct value.

On 2022.2.0b14 on macOS (Arm) it prints:
"foo 1" under Mono (Editor and Standalone), and .NET 7.0
"foo 0" under IL2CPP

This was working previously at least in 2020.3, likely also in 2021.x

Reprocase is as following:
{code:c#}
[StructLayout(LayoutKind.Explicit, Size = 3)]
struct Repro
{
[FieldOffset(1)]
public ushort foo;
}

public void ReproCase()
{
foreach (var field in typeof(Repro).GetFields())
{
var offset = (uint) Marshal.OffsetOf(field.DeclaringType, field.Name).ToInt32();
Debug.LogWarning($"{field.Name} {offset}");
}
} {code}

  1. Resolution Note (fix version 2023.1.0a26):

    Fixed Marshal.OffsetOf returning invalid values in IL2CPP for misaligned fields on macOS.

Add comment

Log in to post comment