https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81936

--- Comment #11 from rguenther at suse dot de <rguenther at suse dot de> ---
On Wed, 23 Aug 2017, vries at gcc dot gnu.org wrote:

> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81936
> 
> --- Comment #9 from Tom de Vries <vries at gcc dot gnu.org> ---
> (In reply to Tom de Vries from comment #8)
> > but found it doesn't work because flag_generate_offload is actually false.
> > 
> > I'm now trying this (code snippet copied from symbol_table::compile), but
> > I'm not sure if setting flag_generate_offload is the proper solution, and if
> > so, where it should be inserted:
> > ...
> > diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c
> > index e8cc765095d..29a1d038b0e 100644
> > --- a/gcc/cgraphunit.c
> > +++ b/gcc/cgraphunit.c
> > @@ -2586,6 +2586,10 @@ symbol_table::finalize_compilation_unit (void)
> >    current_function_decl = NULL;
> >    set_cfun (NULL);
> >  
> > +  /* Offloading requires LTO infrastructure.  */
> > +  if (!in_lto_p && g->have_offload)
> > +    flag_generate_offload = 1;
> > +
> >    /* Do not skip analyzing the functions if there were errors, we
> >       miss diagnostics for following functions otherwise.  */
> >  
> > ...
> 
> That didn't work since g->have_offload is not set yet. Setting it after
> analyze_functions does work:
> ...
> diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c
> index e8cc765095d..080451a44df 100644
> --- a/gcc/cgraphunit.c
> +++ b/gcc/cgraphunit.c
> @@ -2614,6 +2614,10 @@ symbol_table::finalize_compilation_unit (void)
>    /* Gimplify and lower thunks.  */
>    analyze_functions (/*first_time=*/false);
> 
> +  /* Offloading requires LTO infrastructure.  */
> +  if (!in_lto_p && g->have_offload)
> +    flag_generate_offload = 1;
> +
>    if (!seen_error ())
>      {
>        /* Emit early debug for reachable functions, and by consequence,
> ...

Looks good (moving the setting, not replicating it), also adding
the check in dwarf2out.c

> And then we run into the next ICE:
> ...
> libgomp/testsuite/libgomp.c/pr66714.c:17:1: internal compiler error: in
> output_loc_operands, at dwarf2out.c:2232
> 0x86f757 output_loc_operands
>         gcc/dwarf2out.c:2232
> 0x86f757 output_loc_sequence(dw_loc_descr_node*, int)
>         gcc/dwarf2out.c:2419
> 0x86ff61 output_die
>         gcc/dwarf2out.c:10038
> 0x86fa0a output_die
>         gcc/dwarf2out.c:10348
> 0x86fa0a output_die
>         gcc/dwarf2out.c:10348
> 0x871118 output_comp_unit
>         gcc/dwarf2out.c:10483
> 0x898408 dwarf2out_early_finish
>         gcc/dwarf2out.c:30597
> 0x7fe3b8 symbol_table::finalize_compilation_unit()
>         gcc/cgraphunit.c:2631
> Please submit a full bug report,
> ...

Shit happens ;)

Is that now the offload compiler?

Reply via email to