[llvm-dev] Help finding regression from 7-8 related to MemorySSA (original) (raw)
David Chisnall via llvm-dev llvm-dev at lists.llvm.org
Sun Jan 27 05:16:03 PST 2019
- Previous message: [llvm-dev] no member named 'DynamicLibrary' in namespace 'llvm::sys'
- Next message: [llvm-dev] Building libclang_rt.* results in error with -DCOMPILER_RT_USE_BUILTINS_LIBRARY=ON
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hello the list,
Updating from clang 7 to 8, I’m seeing a regression in one of the tests from the GNUstep Objective-C runtime’s test suite. The test[1] uses a static variable to check whether a dealloc method is called. After running 'Early CSE w/ MemorySSA’ as part of an -O2 clang invocation, the assert is incorrectly optimised to always failing.
It appears that there is an issue with MemorySSA believing that the (internal linkage) function that sets the global cannot be called as a result of the @llvm.objc.autoreleasePoolPop intrinsic, ignoring the fact that pointers to the function have escaped before main(), via named linker sections.
With clang 7.0, and most of the pre-8 trunk builds, this test was passing, and it’s only quite recently that the regression has been introduced. I have tried working around it in the front end by putting various things in the compiler-used global, but I cannot determine exactly what needs to go there.
David
[1] Full source here: https://github.com/gnustep/libobjc2/blob/master/Test/AssociatedObject.m There should be a load of @deallocCalled after the call to objc_autoreleasePoolPop (which some ARC optimisers temporarily turn into a call to llvm.objc.autoreleasePoolPop in the middle).
- Previous message: [llvm-dev] no member named 'DynamicLibrary' in namespace 'llvm::sys'
- Next message: [llvm-dev] Building libclang_rt.* results in error with -DCOMPILER_RT_USE_BUILTINS_LIBRARY=ON
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]