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 <t...@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 <rguent...@suse.de> SUSE LINUX GmbH, GF: Felix Imendoerffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nuernberg)