+2017-08-24 Richard Biener <rguenther@suse.de>
+
+ PR debug/81936
+ * dwarf2out.c (output_die): Handle flag_generate_offload like
+ flag_generate_lto.
+ (output_comp_unit): Likewise.
+ (gen_array_type_die): Likewise.
+ (dwarf2out_early_finish): Likewise.
+ (note_variable_value_in_expr): Likewise.
+ (dwarf2out_finish): Likewise. Adjust assert.
+ * cgraphunit.c (symbol_table::compile): Move setting of
+ flag_generate_offload earlier ...
+ (symbol_table::finalize_compilation_unit): ... here, before
+ early debug finalization.
+
2017-08-24 Richard Biener <rguenther@suse.de>
* config/i386/i386.c: Include symbol-summary.h, ipa-prop.h
fprintf (stderr, "Performing interprocedural optimizations\n");
state = IPA;
- /* Offloading requires LTO infrastructure. */
- if (!in_lto_p && g->have_offload)
- flag_generate_offload = 1;
-
/* If LTO is enabled, initialize the streamer hooks needed by GIMPLE. */
if (flag_generate_lto || flag_generate_offload)
lto_streamer_hooks_init ();
/* 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,
if (! die->comdat_type_p && die->die_id.die_symbol
/* Don't output the symbol twice. For LTO we want the label
on the section beginning, not on the actual DIE. */
- && (!flag_generate_lto
+ && ((!flag_generate_lto && !flag_generate_offload)
|| die->die_tag != DW_TAG_compile_unit))
output_die_symbol (die);
/* For LTO cross unit DIE refs we want a symbol on the start of the
debuginfo section, not on the CU DIE. */
- if (flag_generate_lto && oldsym)
+ if ((flag_generate_lto || flag_generate_offload) && oldsym)
{
/* ??? No way to get visibility assembled without a decl. */
tree decl = build_decl (UNKNOWN_LOCATION, VAR_DECL,
add_AT_unsigned (array_die, DW_AT_byte_size, size);
/* ??? We can't annotate types late, but for LTO we may not
generate a location early either (gfortran.dg/save_6.f90). */
- else if (! (early_dwarf && flag_generate_lto)
+ else if (! (early_dwarf && (flag_generate_lto || flag_generate_offload))
&& TYPE_DOMAIN (type) != NULL_TREE
&& TYPE_MAX_VALUE (TYPE_DOMAIN (type)) != NULL_TREE)
{
gen_remaining_tmpl_value_param_die_attribute ();
- if (flag_generate_lto)
+ if (flag_generate_lto || flag_generate_offload)
{
- gcc_assert (flag_fat_lto_objects);
+ gcc_assert (flag_fat_lto_objects || flag_generate_offload);
/* Prune stuff so that dwarf2out_finish runs successfully
for the fat part of the object. */
{
tree decl = loc->dw_loc_oprnd1.v.val_decl_ref;
dw_die_ref ref = lookup_decl_die (decl);
- if (! ref && flag_generate_lto)
+ if (! ref && (flag_generate_lto || flag_generate_offload))
{
/* ??? This is somewhat a hack because we do not create DIEs
for variables not in BLOCK trees early but when generating
early_dwarf_finished = true;
/* Do not generate DWARF assembler now when not producing LTO bytecode. */
- if (!flag_generate_lto)
+ if (!flag_generate_lto && !flag_generate_offload)
return;
/* Now as we are going to output for LTO initialize sections and labels