Hi David,

Sorry it took me a while to give this a try.

> Am 27.10.2021 um 14:36 schrieb David Chisnall <gnus...@theravensnest.org>:
> 
> Since all of them end with a close brace, I suspect that there's something in 
> the field names that isn't a valid PE/COFF symbol name (at least for 
> dllexported things, not sure if the restrictions are different here).  The 
> second one was the easiest to find, since only one class in GNUstep looks 
> like it implements this (note: *something* is wrong in your build environment 
> because I don't think we should be seeing that version when targeting an 
> ARC-enabled runtime and the one fourth from the button looks as if it's 
> trying to use the old NeXT-style exceptions rather than SEH, but it helps 
> find the bug so let's leave it for now).

Good catch. However it looks like autorelease_array_list is always referenced 
in _reallyDealloc even with ARC_RUNTIME being set. I’ll have to look into the 
SETJMP one in more detail.

> The generated variable should be:
> 
> __objc_ivar_offset_NSAutoreleasePool._release.^{autorelease_array_list=^{autorelease_array_list}II[0\01]}
> 
> So it looks as if it's being truncated at the first equals sign?  I wonder if 
> equals is not permitted in dllexported symbols?  This doesn't seem to cause 
> problems for DLL-local symbols on Windows.
> 
> In clang/lib/CodeGen/CGObjCGNU.cpp, you'll see this line:
> 
>    // Prevent the @ from being interpreted as a symbol version.
>    std::replace(TypeEncoding.begin(), TypeEncoding.end(),
>      '@', '\1');
> 
> Underneath it, can you add this:
> 
>    std::replace(TypeEncoding.begin(), TypeEncoding.end(),
>      '=', '\2');

Yes that works!

> Let me know if that fixes things.  If so, it's an ABI break on Windows, so it 
> probably needs to be guarded on whether the symbol is dllexported and may 
> need an explicit opt-in flag.

I guess the only project using this setup so far is WinObjC, which seems like 
it won’t get a compiler update anytime soon, so if it’s an option to break the 
ABI without these flags that would seem ok to me too.

Thanks!
Frederik

Reply via email to