https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60702
--- Comment #14 from Iain Sandoe <iains at gcc dot gnu.org> --- (In reply to Jakub Jelinek from comment #13) > (In reply to Iain Sandoe from comment #11) > > (In reply to Jakub Jelinek from comment #10) > > > Created attachment 45976 [details] > > > gcc9-pr60702.patch > > > > > > Untested fix. > > > > For emulated TLS on x86_64-Darwin16, this progresses > > thread_local12c.C > > thread_local12d.C > > thread_local12i.C > > thread_local12j.C > > thread_local12l.C > > > > which fail without the patch and pass with it, > > > > thread_local11.C > > fails for every instance of _ZTH* > > (passes for _ZTW* 2 gimple) > > Doesn't thread_local-wrap3.C FAIL then as well? No, because it already // { dg-require-alias "" } so it's unsupported. > --- gcc/testsuite/g++.dg/tls/thread_local11.C.jj 2019-03-22 > 15:42:02.506993141 +0100 > +++ gcc/testsuite/g++.dg/tls/thread_local11.C 2019-03-22 15:56:11.077364204 > +0100 > @@ -15,18 +15,18 @@ > // { dg-final { scan-tree-dump-times "_ZTWN1T2u6E" 2 "gimple" } } > // { dg-final { scan-tree-dump-times "_ZTWN1T2u7E" 2 "gimple" } } > // { dg-final { scan-tree-dump-times "_ZTWN1T2u8E" 2 "gimple" } } > -// { dg-final { scan-tree-dump-times "_ZTH2s1" 1 "gimple" } } > -// { dg-final { scan-tree-dump-times "_ZTH2s2" 1 "gimple" } } > -// { dg-final { scan-tree-dump-times "_ZTH2s3" 1 "gimple" } } > -// { dg-final { scan-tree-dump-times "_ZTH2s4" 1 "gimple" } } > -// { dg-final { scan-tree-dump-times "_ZTHN1T2u1E" 1 "gimple" } } > -// { dg-final { scan-tree-dump-times "_ZTHN1T2u2E" 1 "gimple" } } > -// { dg-final { scan-tree-dump-times "_ZTHN1T2u3E" 1 "gimple" } } > -// { dg-final { scan-tree-dump-times "_ZTHN1T2u4E" 1 "gimple" } } > -// { dg-final { scan-tree-dump-times "_ZTHN1T2u5E" 1 "gimple" } } > -// { dg-final { scan-tree-dump-times "_ZTHN1T2u6E" 1 "gimple" } } > -// { dg-final { scan-tree-dump-times "_ZTHN1T2u7E" 1 "gimple" } } > -// { dg-final { scan-tree-dump-times "_ZTHN1T2u8E" 1 "gimple" } } > +// { dg-final { scan-tree-dump-times "_ZTH2s1" 1 "gimple" { target > tls_native } } } > +// { dg-final { scan-tree-dump-times "_ZTH2s2" 1 "gimple" { target > tls_native } } } > +// { dg-final { scan-tree-dump-times "_ZTH2s3" 1 "gimple" { target > tls_native } } } > +// { dg-final { scan-tree-dump-times "_ZTH2s4" 1 "gimple" { target > tls_native } } } > +// { dg-final { scan-tree-dump-times "_ZTHN1T2u1E" 1 "gimple" { target > tls_native } } } > +// { dg-final { scan-tree-dump-times "_ZTHN1T2u2E" 1 "gimple" { target > tls_native } } } > +// { dg-final { scan-tree-dump-times "_ZTHN1T2u3E" 1 "gimple" { target > tls_native } } } > +// { dg-final { scan-tree-dump-times "_ZTHN1T2u4E" 1 "gimple" { target > tls_native } } } > +// { dg-final { scan-tree-dump-times "_ZTHN1T2u5E" 1 "gimple" { target > tls_native } } } > +// { dg-final { scan-tree-dump-times "_ZTHN1T2u6E" 1 "gimple" { target > tls_native } } } > +// { dg-final { scan-tree-dump-times "_ZTHN1T2u7E" 1 "gimple" { target > tls_native } } } > +// { dg-final { scan-tree-dump-times "_ZTHN1T2u8E" 1 "gimple" { target > tls_native } } } > > #include "thread_local11.h" ^^ works for me, results below. I guess we could do something more clever to detect that the __tls_init calls are present for !tls_native. c.f. PR84497 where we don't generate the call (not had a chance to analyse that yet). === Running /src/gcc-trunk/gcc/testsuite/g++.dg/tls/tls.exp ... === g++ Summary for unix/-m64 === # of expected passes 307 # of expected failures 2 # of unsupported tests 55 Running target unix/-m32 Running /src/gcc-trunk/gcc/testsuite/g++.dg/tls/tls.exp ... === g++ Summary for unix/-m32 === # of expected passes 307 # of expected failures 2 # of unsupported tests 55 === g++ Summary === # of expected passes 614 # of expected failures 4 # of unsupported tests 110 /scratch/10-12-sie/gcc-trunk-unpatched/gcc/testsuite/g++/../../xg++ version 9.0.1 20190322 (experimental) [trunk revision 269875] (GCC)