diff options
author | Richard Biener <rguenther@suse.de> | 2016-05-11 13:59:34 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2016-05-11 13:59:34 +0000 |
commit | dff70323a39a34ba26c729f50fe45d78912133e8 (patch) | |
tree | 539ecd9c43fcd1d2a855009251ccd6fcccc93bbb /gcc | |
parent | 56a3d28ba3f48c5d4c6d00c558e2432fd8b03d6e (diff) | |
download | gcc-dff70323a39a34ba26c729f50fe45d78912133e8.zip gcc-dff70323a39a34ba26c729f50fe45d78912133e8.tar.gz gcc-dff70323a39a34ba26c729f50fe45d78912133e8.tar.bz2 |
re PR debug/71057 (ICE in schedule_generic_params_dies_gen, at dwarf2out.c:24142)
2016-05-11 Richard Biener <rguenther@suse.de>
PR debug/71057
* dwarf2out.c (retry_incomplete_types): Set early_dwarf.
(dwarf2out_finish): Move retry_incomplete_types call ...
(dwarf2out_early_finish): ... here.
* g++.dg/debug/pr71057.C: New testcase.
From-SVN: r236121
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/dwarf2out.c | 10 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/debug/pr71057.C | 12 |
4 files changed, 30 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ffef84e..2332732 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,12 @@ 2016-05-11 Richard Biener <rguenther@suse.de> + PR debug/71057 + * dwarf2out.c (retry_incomplete_types): Set early_dwarf. + (dwarf2out_finish): Move retry_incomplete_types call ... + (dwarf2out_early_finish): ... here. + +2016-05-11 Richard Biener <rguenther@suse.de> + PR middle-end/71002 * alias.c (reference_alias_ptr_type): Preserve alias-set zero if the langhook insists on it. diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 8f192e8..b0173f7 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -19405,11 +19405,13 @@ gen_entry_point_die (tree decl, dw_die_ref context_die) static void retry_incomplete_types (void) { + set_early_dwarf s; int i; for (i = vec_safe_length (incomplete_types) - 1; i >= 0; i--) if (should_emit_struct_debug ((*incomplete_types)[i], DINFO_USAGE_DIR_USE)) gen_type_die ((*incomplete_types)[i], comp_unit_die ()); + vec_safe_truncate (incomplete_types, 0); } /* Determine what tag to use for a record type. */ @@ -27390,10 +27392,6 @@ dwarf2out_finish (const char *filename) resolve_addr (comp_unit_die ()); move_marked_base_types (); - /* Walk through the list of incomplete types again, trying once more to - emit full debugging info for them. */ - retry_incomplete_types (); - if (flag_eliminate_unused_debug_types) prune_unused_types (); @@ -27694,6 +27692,10 @@ dwarf2out_finish (const char *filename) static void dwarf2out_early_finish (void) { + /* Walk through the list of incomplete types again, trying once more to + emit full debugging info for them. */ + retry_incomplete_types (); + /* The point here is to flush out the limbo list so that it is empty and we don't need to stream it for LTO. */ flush_limbo_die_list (); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0190872..4f7f0f8 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-05-11 Richard Biener <rguenther@suse.de> + + PR debug/71057 + * g++.dg/debug/pr71057.C: New testcase. + 2016-05-11 Jakub Jelinek <jakub@redhat.com> PR fortran/70855 diff --git a/gcc/testsuite/g++.dg/debug/pr71057.C b/gcc/testsuite/g++.dg/debug/pr71057.C new file mode 100644 index 0000000..2ed1eed --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/pr71057.C @@ -0,0 +1,12 @@ +// { dg-do compile } +// { dg-options "-g" } +template <typename _Tp> using decay_t = _Tp; +template <typename> struct A; +template <typename> struct B { B(A<int>); }; +template <typename> struct C { + template <typename U> using constructor = B<decay_t<U>>; + typedef constructor<int> dummy; +}; +template <typename> struct D {}; +C<int> a; +D<B<int>> fn1() { fn1, a; } |