This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
template <typename T> class A { static __thread T a; };We are calling late_global_decl because we are about to remove the unused static from the symbol table:
/* See if the debugger can use anything before the DECL passes away. Perhaps it can notice a DECL that is now a constant and can tag the early DIE with an appropriate attribute. Otherwise, this is the last chance the debug_hooks have at looking at optimized away DECLs, since late_global_decl will subsequently be called from the contents of the now pruned symbol table. */ if (!decl_function_context (node->decl)) (*debug_hooks->late_global_decl) (node->decl); Since gen_type_die_with_usage() cannot handle TEMPLATE_TYPE_PARMs we ICE.I think we need to avoid calling late_global_decl on DECL's for which decl_type_context() is true, similarly to what we do for the call to early_global_decl in rest_of_decl_compilation:
&& !decl_function_context (decl) && !current_function_decl && DECL_SOURCE_LOCATION (decl) != BUILTINS_LOCATION && !decl_type_context (decl)) (*debug_hooks->early_global_decl) (decl);Presumably the old code did not run into this problem because the TEMPLATE_TYPE_PARAMs had been lowered by the time dwarf2out_decl was called, but here we are calling late_global_decl relatively early.
The attached patch fixes the problem. Tested with --enable-languages=all. Ada had other issues, so I skipped it. OK for mainline?
Attachment:
curr
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |