This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Fix ICE for static vars in offloaded functions
On Wed, 7 Mar 2018, Tom de Vries wrote:
> On 03/07/2018 02:29 PM, Richard Biener wrote:
> > On Wed, 7 Mar 2018, Jakub Jelinek wrote:
> >
> > > On Wed, Mar 07, 2018 at 02:20:26PM +0100, Tom de Vries wrote:
> > > > Fix ICE for static vars in offloaded functions
> > > >
> > > > 2018-03-06 Tom de Vries <tom@codesourcery.com>
> > > >
> > > > PR lto/84592
> > > > * varpool.c (varpool_node::get_create): Mark static variables in
> > > > offloaded functions as offloadable.
> > > >
> > > > * testsuite/libgomp.c/pr84592-2.c: New test.
> > > > * testsuite/libgomp.c/pr84592.c: New test.
> > > > * testsuite/libgomp.oacc-c-c++-common/pr84592-3.c: New test.
> > >
> > > Ok, thanks
> >
> > + bool in_offload_func
> > + = (cfun
> > + && TREE_STATIC (decl)
> > + && (lookup_attribute ("omp target entr
> >
> > I think you want to use decl_function_context (decl) here,
> > not rely on magic cfun being set. The whole varpool.c file
> > doesn't mention cfun yet and you shoudln't either.
> >
>
> decl_function_context (decl) returns main:
> ...
> (gdb) call debug_generic_expr (decl)
> test
> (gdb) call decl_function_context (decl)
> $2 = (tree_node *) 0x7ffff6978c00
> (gdb) call debug_generic_expr ($2)
> main
> ...
> while the function annotated as being an offload function is main._omp_fn.0.
Well, that's because the static isn't duplicated (it can't be) so it
retains the original context.
> The varpool_node::get_create is called during cgraph_edge::rebuild_edges here
> in expand_omp_target:
But at this point it's not created but just looked up, right?
I think the fix is to mark the decl as offloaded when we walk the IL
of the outlined function. The current point looks like a hack.
Richard.
> ...
> 7087 /* Fix the callgraph edges for child_cfun. Those for cfun will
> be
> 7088 fixed in a following pass. */
> 7089 push_cfun (child_cfun);
> 7090 if (need_asm)
> 7091 assign_assembler_name_if_needed (child_fn);
> 7092 cgraph_edge::rebuild_edges ();
> ...
>
> Thanks,
> - Tom
>
>
--
Richard Biener <rguenther@suse.de>
SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)