Linking fails with the message "illegal thread-local reference to regular symbol" when attempting to create a dylib which references an external TLS variable declared with `__thread`. In `foo.cc`: extern __thread int x; void foo() { ++x; } The compile step is (this works fine): $CXX -stdlib=libc++ -std=c++11 -fvisibility=hidden -fPIC -o foo.cc.o -c foo.cc The linking step (where the error is thrown): $CXX -stdlib=libc++ -std=c++11 -fvisibility=hidden -dynamiclib -Wl,-undefined,dynamic_lookup -o libfoo.dylib foo.cpp.o Now this works fine in gcc (5 and 4.9.3) on the same platform. I understand there are differences in the implementation of `__thread`, but I cannot find any documentation addressing this specific issue anywhere, so I assume this is a bug. Version info: $ $CXX --version Apple LLVM version 7.0.2 (clang-700.1.81) Target: x86_64-apple-darwin14.5.0 Thread model: posix $ ld -v @(#)PROGRAM:ld PROJECT:ld64-253.9 configured to support archs: armv6 armv7 armv7s arm64 i386 x86_64 x86_64h armv6m armv7k armv7m armv7em (tvOS) LTO support using: Apple LLVM 7.0.2 (clang-700.1.81)
Moving to more specific "MachO" LLD component (instead of generic "All Bugs").
Closing this as it applies to the old iteration of LLD-MachO which is not being developed. (The new one is named `ld64.lld.darwinnew`, and will be receiving active feature development and bug fixes.)