[PATCH] Fix ICE for static vars in offloaded functions

Tom de Vries Tom_deVries@mentor.com
Wed Mar 7 14:51:00 GMT 2018


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.

The varpool_node::get_create is called during cgraph_edge::rebuild_edges 
here in expand_omp_target:
...
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



More information about the Gcc-patches mailing list