Interlocked methods crashing with IL2CPP

Hey,

I currently work on getting our project ready for IL2CPP. So far everything compiles but during runtime all calls of static Interlocked methods crash.

Here are some C# examples:

// we get some bottleneck, start next worker
var runningCounter = Interlocked.Read(ref this.runningCounter);

or

Interlocked.Increment(ref this.runningCounter);

And here’s the compiled CPP code:

// System.Int64 System.Threading.Interlocked::Increment(System.Int64&)
extern "C" int64_t Interlocked_Increment_m18231 (Object_t * __this /* static, unused */, int64_t* ___location, const MethodInfo* method)
{
    using namespace il2cpp::icalls;
    typedef int64_t (*Interlocked_Increment_m18231_ftn) (int64_t*);
    return  ((Interlocked_Increment_m18231_ftn)mscorlib::System::Threading::Interlocked::Increment64) (___location);
}

And here’s the crash error I get:

Tread 1: EXC_BAD_ACCESS (code=EXC_ARM_DA_ALIGN, address=0x93bcf14)

Any hints on this one?
It’s totally strange and as I said, every Interlocked call crashes.

Thanks a lot

This looks very similar to a bug we have just corrected internally. I believe that is is a problem only on 32-bit devices. Are seeing this on 64-bit devices as well?

Nope, 64-bit devices work fine with the Interlocked classes.

Do you have any idea when this bug gets patched?

64 bit devices works fine for me too.
We want the patch :wink: