> On 18 Jan 2023, at 23:16, Ludovic Courtès > wrote: > > Hi Daniel, > > lloda > skribis: > >> .../libguile/threads.h:194:43: error: 'scm_i_current_thread' is defined with tls model global-dynamic >> 194 | SCM_INTERNAL SCM_THREAD_LOCAL scm_thread *scm_i_current_thread; >> | ^ >> .../libguile/threads.c:357:30: note: previously defined here as local-dynamic >> 357 | SCM_THREAD_LOCAL scm_thread *scm_i_current_thread = NULL; >> >> Simply repeating SCM_INTERNAL in the .c fixes it... > > The problem is that ‘SCM_INTERNAL’ is synonymous with ‘extern’, which > makes no sense for a definition (threads.c:357), so rightfully GCC > GNU/Linux rightfully complains: > > --8<---------------cut here---------------start------------->8--- > CC libguile_3.0_la-threads.lo > threads.c:358:43: warning: 'scm_i_current_thread' initialized and declared 'extern' > 358 | SCM_INTERNAL SCM_THREAD_LOCAL scm_thread *scm_i_current_thread = NULL; > | ^~~~~~~~~~~~~~~~~~~~ > --8<---------------cut here---------------end--------------->8--- > > It’s just a warning, but still not looking good. Hi, Agreed, I had the same warning on mac os. Looked like the least bad choice... > Is there something else at play, such as a ‘-ftls-model’ flag being > passed to GCC somehow (info “(gcc) Code Gen Options")? > > If not, should we have: > > #define SCM_THREAD_LOCAL \ > __thread __attribute__ ((__tls_model__ ("global-dynamic"))) > > instead (info "(gcc) Common Variable Attributes")? > > Would that work with Clang? > > Ludo’. I don't seem to have any such flags. The attribute does fix the issue on mac os with gcc 12. I hadn't tried clang before, but I did now, and clang 14 works fine with or without the attribute. So the fix would only be for gcc. Thanks Daniel