aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2016-09-19 07:20:16 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2016-09-19 07:20:16 +0000
commit321e76fbf83720a7d88948d3e157ea9097e099ad (patch)
treeb2a2ed3d1067076874c7b9afa52e6cdfe3344e21
parentae5276392fb59dbdec56dd8cc6cc8253d9334c8b (diff)
downloadgcc-321e76fbf83720a7d88948d3e157ea9097e099ad.zip
gcc-321e76fbf83720a7d88948d3e157ea9097e099ad.tar.gz
gcc-321e76fbf83720a7d88948d3e157ea9097e099ad.tar.bz2
dwarf2out.c (early_dwarf_finished): New global.
2016-09-16 Richard Biener <rguenther@suse.de> * dwarf2out.c (early_dwarf_finished): New global. (set_early_dwarf::set_early_dwarf): Assert early_dwarf_finished is false. (dwarf2out_early_finish): Set early_dwarf_finished at the end, if called from LTO exit early. (dwarf2out_late_global_decl): When being during the early debug phase do not add locations but only const value attributes. Adjust the way we generate early DIEs for LTO. lto/ * lto.c (lto_main): Invoke early_finish debug hook. From-SVN: r240228
-rw-r--r--gcc/ChangeLog11
-rw-r--r--gcc/dwarf2out.c45
-rw-r--r--gcc/lto/ChangeLog4
-rw-r--r--gcc/lto/lto.c3
4 files changed, 55 insertions, 8 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e29c212..2f3f91b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,16 @@
2016-09-19 Richard Biener <rguenther@suse.de>
+ * dwarf2out.c (early_dwarf_finished): New global.
+ (set_early_dwarf::set_early_dwarf): Assert early_dwarf_finished
+ is false.
+ (dwarf2out_early_finish): Set early_dwarf_finished at the end,
+ if called from LTO exit early.
+ (dwarf2out_late_global_decl): When being during the early
+ debug phase do not add locations but only const value attributes.
+ Adjust the way we generate early DIEs for LTO.
+
+2016-09-19 Richard Biener <rguenther@suse.de>
+
PR middle-end/77605
* tree-data-ref.c (analyze_subscript_affine_affine): Use the
proper niter to bound the loops.
diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c
index 11e0113..434a2fc 100644
--- a/gcc/dwarf2out.c
+++ b/gcc/dwarf2out.c
@@ -2711,9 +2711,14 @@ die_node;
/* Set to TRUE while dwarf2out_early_global_decl is running. */
static bool early_dwarf;
+static bool early_dwarf_finished;
struct set_early_dwarf {
bool saved;
- set_early_dwarf () : saved(early_dwarf) { early_dwarf = true; }
+ set_early_dwarf () : saved(early_dwarf)
+ {
+ gcc_assert (! early_dwarf_finished);
+ early_dwarf = true;
+ }
~set_early_dwarf () { early_dwarf = saved; }
};
@@ -23878,18 +23883,31 @@ dwarf2out_early_global_decl (tree decl)
static void
dwarf2out_late_global_decl (tree decl)
{
- /* We have to generate early debug late for LTO. */
- if (in_lto_p)
- dwarf2out_early_global_decl (decl);
-
- /* Fill-in any location information we were unable to determine
- on the first pass. */
+ /* Fill-in any location information we were unable to determine
+ on the first pass. */
if (TREE_CODE (decl) == VAR_DECL
&& !POINTER_BOUNDS_P (decl))
{
dw_die_ref die = lookup_decl_die (decl);
+
+ /* We have to generate early debug late for LTO. */
+ if (! die && in_lto_p)
+ {
+ dwarf2out_decl (decl);
+ die = lookup_decl_die (decl);
+ }
+
if (die)
- add_location_or_const_value_attribute (die, decl, false);
+ {
+ /* We get called during the early debug phase via the symtab
+ code invoking late_global_decl for symbols that are optimized
+ out. When the early phase is not finished, do not add
+ locations. */
+ if (! early_dwarf_finished)
+ tree_add_const_value_attribute_for_decl (die, decl);
+ else
+ add_location_or_const_value_attribute (die, decl, false);
+ }
}
}
@@ -28137,6 +28155,14 @@ dwarf2out_early_finish (void)
{
set_early_dwarf s;
+ /* With LTO early dwarf was really finished at compile-time, so make
+ sure to adjust the phase after annotating the LTRANS CU DIE. */
+ if (in_lto_p)
+ {
+ early_dwarf_finished = true;
+ return;
+ }
+
/* Walk through the list of incomplete types again, trying once more to
emit full debugging info for them. */
retry_incomplete_types ();
@@ -28163,6 +28189,9 @@ dwarf2out_early_finish (void)
}
}
deferred_asm_name = NULL;
+
+ /* The early debug phase is now finished. */
+ early_dwarf_finished = true;
}
/* Reset all state within dwarf2out.c so that we can rerun the compiler
diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog
index 0744822..c5bd7a0 100644
--- a/gcc/lto/ChangeLog
+++ b/gcc/lto/ChangeLog
@@ -1,3 +1,7 @@
+2016-09-19 Richard Biener <rguenther@suse.de>
+
+ * lto.c (lto_main): Invoke early_finish debug hook.
+
2016-07-25 Richard Biener <rguenther@suse.de>
* lto.c (compare_tree_sccs_1): Remove streamer_handle_as_builtin_p uses.
diff --git a/gcc/lto/lto.c b/gcc/lto/lto.c
index 73d1e26..c94ed62 100644
--- a/gcc/lto/lto.c
+++ b/gcc/lto/lto.c
@@ -3315,6 +3315,9 @@ lto_main (void)
if (!flag_ltrans)
lto_promote_statics_nonwpa ();
+ /* Annotate the CU DIE and mark the early debug phase as finished. */
+ debug_hooks->early_finish ();
+
/* Let the middle end know that we have read and merged all of
the input files. */
symtab->compile ();