On Tue, 30 Aug 2022, Martin Jambor wrote: > There is still the optimize attribute so in fact no, even in non-LTO > mode if there is no current function, you cannot trust the "global" > "optimize" thing. > > Ideally we would assert that no "analysis" phase of an IPA pass reads > the global optimization flags, so please don't add new places where we > do. > > You can either add a parameter to decl_default_tls_model to tell it > what context it is called from and IMHO it would also be acceptable to > check whether we have a non-NULL cfun and decide based on that (but here > I only hope it is not something others might object to).
I see, thank you for explaining the issue, and sorry if I was a bit stubborn. Does the attached patch (incremental change below) look better? It no longer has the 'shortcut' where iterating over referrers is avoided for the common case of plain 'gcc -O2' and no 'optimize' attributes, but fortunately TLS variables are not so numerous to make chasing that worthwhile. --- a/gcc/varasm.cc +++ b/gcc/varasm.cc @@ -6703,8 +6703,8 @@ have_optimized_refs (struct symtab_node *symbol) static bool optimize_dyn_tls_for_decl_p (const_tree decl) { - if (optimize) - return true; + if (cfun) + return optimize; return symtab->state >= IPA && have_optimized_refs (symtab_node::get (decl)); } Alexander