diff options
author | Richard Biener <rguenther@suse.de> | 2019-06-21 13:56:54 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2019-06-21 13:56:54 +0000 |
commit | 050e182a757bdf227a7e2425f06f9e2fd4dff8cb (patch) | |
tree | 066a78d41879709dcfd6acba5464f79e1bc6cb7e /gcc | |
parent | b614fca25fac28542b8c6b2df3862688b96e0581 (diff) | |
download | gcc-050e182a757bdf227a7e2425f06f9e2fd4dff8cb.zip gcc-050e182a757bdf227a7e2425f06f9e2fd4dff8cb.tar.gz gcc-050e182a757bdf227a7e2425f06f9e2fd4dff8cb.tar.bz2 |
re PR debug/90914 (ICE in schedule_generic_params_dies_gen, at dwarf2out.c:27153)
2019-06-21 Richard Biener <rguenther@suse.de>
PR debug/90914
* dwarf2out.c (prune_unused_types_walk): Always consider
function-local extern declarations as used.
* g++.dg/debug/pr90914.C: New testcase.
From-SVN: r272547
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/dwarf2out.c | 11 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/debug/pr90914.C | 8 |
4 files changed, 28 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0c75a0f..1028781 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2019-06-21 Richard Biener <rguenther@suse.de> + PR debug/90914 + * dwarf2out.c (prune_unused_types_walk): Always consider + function-local extern declarations as used. + +2019-06-21 Richard Biener <rguenther@suse.de> + PR tree-optimization/90913 * tree-vect-loop-manip.c (vect_loop_versioning): Do not re-use the scalar variant of if-conversion versioning. diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 960d9be..6a85c12 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -29419,9 +29419,16 @@ prune_unused_types_walk (dw_die_ref die) break; /* premark_used_variables marks external variables --- don't mark - them here. */ + them here. But function-local externals are always considered + used. */ if (get_AT (die, DW_AT_external)) - return; + { + for (c = die->die_parent; c; c = c->die_parent) + if (c->die_tag == DW_TAG_subprogram) + break; + if (!c) + return; + } } /* FALLTHROUGH */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8181bcd..21eef28 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2019-06-21 Richard Biener <rguenther@suse.de> + PR debug/90914 + * g++.dg/debug/pr90914.C: New testcase. + +2019-06-21 Richard Biener <rguenther@suse.de> + PR tree-optimization/90913 * gfortran.dg/vect/pr90913.f90: New testcase. diff --git a/gcc/testsuite/g++.dg/debug/pr90914.C b/gcc/testsuite/g++.dg/debug/pr90914.C new file mode 100644 index 0000000..3681d58 --- /dev/null +++ b/gcc/testsuite/g++.dg/debug/pr90914.C @@ -0,0 +1,8 @@ +// { dg-do compile } +// { dg-additional-options "-feliminate-unused-debug-symbols" } + +template <class> class A; +void f () +{ + extern A <double> b; +} |