This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [patch] PR debug/66653: avoid late_global_decl on decl_type_context()s
- From: Richard Biener <richard dot guenther at gmail dot com>
- To: Aldy Hernandez <aldyh at redhat dot com>
- Cc: gcc-patches <gcc-patches at gcc dot gnu dot org>, jason merrill <jason at redhat dot com>
- Date: Thu, 25 Jun 2015 11:48:33 +0200
- Subject: Re: [patch] PR debug/66653: avoid late_global_decl on decl_type_context()s
- Authentication-results: sourceware.org; auth=none
- References: <558B71A3 dot 3080004 at redhat dot com>
On Thu, Jun 25, 2015 at 5:12 AM, Aldy Hernandez <aldyh@redhat.com> wrote:
> The problem here is that we are trying to call dwarf2out_late_global_decl()
> on a static variable in a template which has a type of TEMPLATE_TYPE_PARM:
>
> 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.
I think we need to sort out that instead - by the time we call _early_
global decl it
should already be "lowered". Otherwise LTO streaming will run into
the decl_type_context it cannot handle. Is the case running into
late_global_decl
before we called early_global_decl on it btw?
Richard.
> The attached patch fixes the problem.
>
> Tested with --enable-languages=all. Ada had other issues, so I skipped it.
>
> OK for mainline?