mirror of git://gcc.gnu.org/git/gcc.git
re PR debug/86585 (ICE in gen_member_die, at dwarf2out.c:24935)
2018-07-20 Richard Biener <rguenther@suse.de> PR debug/86585 * dwarf2out.c (dwarf2out_die_ref_for_decl): Test in_lto_p to cover -flto-partition=none. lto/ * lto.c (unify_scc): Before we throw away an SCC see if we can amend prevailing single-entry SCC with debug refs. * g++.dg/lto/pr86585_0.C: New testcase. * g++.dg/lto/pr86585_1.C: Likewise. From-SVN: r262901
This commit is contained in:
parent
4e51aacb1c
commit
efe0e6cd21
|
|
@ -1,3 +1,9 @@
|
|||
2018-07-20 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR debug/86585
|
||||
* dwarf2out.c (dwarf2out_die_ref_for_decl): Test in_lto_p
|
||||
to cover -flto-partition=none.
|
||||
|
||||
2018-07-20 Martin Liska <mliska@suse.cz>
|
||||
|
||||
* tree.h (DECL_LOCATION_RANGE): Remove unused macro.
|
||||
|
|
|
|||
|
|
@ -5851,8 +5851,7 @@ dwarf2out_die_ref_for_decl (tree decl, const char **sym,
|
|||
{
|
||||
dw_die_ref die;
|
||||
|
||||
if ((flag_wpa || flag_incremental_link == INCREMENTAL_LINK_LTO)
|
||||
&& !decl_die_table)
|
||||
if (in_lto_p && !decl_die_table)
|
||||
return false;
|
||||
|
||||
if (TREE_CODE (decl) == BLOCK)
|
||||
|
|
@ -5865,8 +5864,7 @@ dwarf2out_die_ref_for_decl (tree decl, const char **sym,
|
|||
/* During WPA stage and incremental linking we currently use DIEs
|
||||
to store the decl <-> label + offset map. That's quite inefficient
|
||||
but it works for now. */
|
||||
if (flag_wpa
|
||||
|| flag_incremental_link == INCREMENTAL_LINK_LTO)
|
||||
if (in_lto_p)
|
||||
{
|
||||
dw_die_ref ref = get_AT_ref (die, DW_AT_abstract_origin);
|
||||
if (!ref)
|
||||
|
|
|
|||
|
|
@ -1,3 +1,9 @@
|
|||
2018-07-20 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR debug/86585
|
||||
* lto.c (unify_scc): Before we throw away an SCC see if we
|
||||
can amend prevailing single-entry SCC with debug refs.
|
||||
|
||||
2018-07-13 Jan Hubicka <hubicka@ucw.cz>
|
||||
|
||||
* lto.c (do_stream_out): Add PART parameter; open dump file.
|
||||
|
|
|
|||
|
|
@ -1638,6 +1638,21 @@ unify_scc (struct data_in *data_in, unsigned from,
|
|||
to the tree node mapping computed by compare_tree_sccs. */
|
||||
if (len == 1)
|
||||
{
|
||||
/* If we got a debug reference queued, see if the prevailing
|
||||
tree has a debug reference and if not, register the one
|
||||
for the tree we are about to throw away. */
|
||||
if (dref_queue.length () == 1)
|
||||
{
|
||||
dref_entry e = dref_queue.pop ();
|
||||
gcc_assert (e.decl
|
||||
== streamer_tree_cache_get_tree (cache, from));
|
||||
const char *sym;
|
||||
unsigned HOST_WIDE_INT off;
|
||||
if (!debug_hooks->die_ref_for_decl (pscc->entries[0], &sym,
|
||||
&off))
|
||||
debug_hooks->register_external_die (pscc->entries[0],
|
||||
e.sym, e.off);
|
||||
}
|
||||
lto_maybe_register_decl (data_in, pscc->entries[0], from);
|
||||
streamer_tree_cache_replace_tree (cache, pscc->entries[0], from);
|
||||
}
|
||||
|
|
@ -1669,7 +1684,9 @@ unify_scc (struct data_in *data_in, unsigned from,
|
|||
free_node (scc->entries[i]);
|
||||
}
|
||||
|
||||
/* Drop DIE references. */
|
||||
/* Drop DIE references.
|
||||
??? Do as in the size-one SCC case which involves sorting
|
||||
the queue. */
|
||||
dref_queue.truncate (0);
|
||||
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -1,3 +1,9 @@
|
|||
2018-07-20 Richard Biener <rguenther@suse.de>
|
||||
|
||||
PR debug/86585
|
||||
* g++.dg/lto/pr86585_0.C: New testcase.
|
||||
* g++.dg/lto/pr86585_1.C: Likewise.
|
||||
|
||||
2018-07-19 Martin Sebor <msebor@redhat.com>
|
||||
|
||||
PR tree-optimization/83776
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
// { dg-lto-do link }
|
||||
// { dg-require-effective-target fpic }
|
||||
// { dg-require-effective-target shared }
|
||||
// { dg-lto-options { { -flto -g -nostdlib -shared -fPIC } } }
|
||||
namespace Inkscape {
|
||||
class a;
|
||||
}
|
||||
class b {
|
||||
Inkscape::a *c;
|
||||
virtual void d();
|
||||
};
|
||||
class e {
|
||||
b f;
|
||||
};
|
||||
class g : e {
|
||||
void h();
|
||||
};
|
||||
void g::h() {}
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
struct a {
|
||||
struct b {
|
||||
b();
|
||||
} c;
|
||||
};
|
||||
class d {
|
||||
a e;
|
||||
};
|
||||
namespace aa {
|
||||
class h {};
|
||||
} // namespace aa
|
||||
class k {
|
||||
typedef aa::h f;
|
||||
f g;
|
||||
};
|
||||
namespace Inkscape {
|
||||
class l {
|
||||
k i;
|
||||
class : d {
|
||||
} j;
|
||||
l();
|
||||
};
|
||||
l::l() {}
|
||||
} // namespace Inkscape
|
||||
Loading…
Reference in New Issue