https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101786
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- IMHO clang++ implements it incorrectly, if you compile the testcase I've added in the patch with clang, then it will properly use _ZTH for the 4th variable (as it has non-trivial dtor, that dtor needs to be registered and that counts as dynamic initialization for the purposes of TLS wrappers), but for the case of incomplete type it doesn't, even when it can't know whether the definition of the var will have trivial or non-trivial dtor.