From 5d52d2c949fe6277fd1f31be8d6f48e1dae06652 Mon Sep 17 00:00:00 2001 From: Richard Biener Date: Thu, 24 Aug 2017 13:41:51 +0000 Subject: [PATCH] re PR debug/81936 (ICE in dwarf2out_die_ref_for_decl, at dwarf2out.c:5543) 2017-08-24 Richard Biener 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. From-SVN: r251332 --- gcc/ChangeLog | 15 +++++++++++++++ gcc/cgraphunit.c | 8 ++++---- gcc/dwarf2out.c | 14 +++++++------- 3 files changed, 26 insertions(+), 11 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 25149f3e5..6726127 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,20 @@ 2017-08-24 Richard Biener + 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 + * config/i386/i386.c: Include symbol-summary.h, ipa-prop.h and ipa-fnsummary.h. (ix86_can_inline_p): When ix86_fpmath flags do not match diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c index e8cc765..a287f0d 100644 --- a/gcc/cgraphunit.c +++ b/gcc/cgraphunit.c @@ -2464,10 +2464,6 @@ symbol_table::compile (void) 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 (); @@ -2614,6 +2610,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, diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index ba8d24b..a4887b5 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -9999,7 +9999,7 @@ output_die (dw_die_ref die) 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); @@ -10450,7 +10450,7 @@ output_comp_unit (dw_die_ref die, int output_if_empty, /* 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, @@ -20843,7 +20843,7 @@ gen_array_type_die (tree type, dw_die_ref context_die) 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) { @@ -29740,9 +29740,9 @@ dwarf2out_finish (const char *) 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. */ @@ -30318,7 +30318,7 @@ note_variable_value_in_expr (dw_die_ref die, dw_loc_descr_ref loc) { 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 @@ -30529,7 +30529,7 @@ dwarf2out_early_finish (const char *filename) 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 -- 2.7.4