re PR debug/69077 (omnetpp ICEs with -flto -g)

2016-01-12  Richard Biener  <rguenther@suse.de>

	PR lto/69077
	lto/
	* lto-symtab.c (lto_symtab_prevailing_virtual_decl): Properly
	merge TREE_ADDRESSABLE and DECL_POSSIBLY_INLINED flags.

	* g++.dg/lto/pr69077_0.C: New testcase.
	* g++.dg/lto/pr69077_1.C: Likewise.

From-SVN: r232272
This commit is contained in:
Richard Biener 2016-01-12 14:22:40 +00:00 committed by Richard Biener
parent 8b1bbf9cd7
commit 3c4e91c903
5 changed files with 53 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2016-01-12 Richard Biener <rguenther@suse.de>
PR lto/69077
* lto-symtab.c (lto_symtab_prevailing_virtual_decl): Properly
merge TREE_ADDRESSABLE and DECL_POSSIBLY_INLINED flags.
2016-01-04 Jakub Jelinek <jakub@redhat.com>
Update copyright years.

View File

@ -997,6 +997,18 @@ lto_symtab_prevailing_virtual_decl (tree decl)
n = n->next_sharing_asm_name;
if (n)
{
/* Merge decl state in both directions, we may still end up using
the other decl. */
TREE_ADDRESSABLE (n->decl) |= TREE_ADDRESSABLE (decl);
TREE_ADDRESSABLE (decl) |= TREE_ADDRESSABLE (n->decl);
if (TREE_CODE (decl) == FUNCTION_DECL)
{
/* Merge decl state in both directions, we may still end up using
the other decl. */
DECL_POSSIBLY_INLINED (n->decl) |= DECL_POSSIBLY_INLINED (decl);
DECL_POSSIBLY_INLINED (decl) |= DECL_POSSIBLY_INLINED (n->decl);
}
lto_symtab_prevail_decl (n->decl, decl);
decl = n->decl;
}

View File

@ -1,3 +1,9 @@
2016-01-12 Richard Biener <rguenther@suse.de>
PR lto/69077
* g++.dg/lto/pr69077_0.C: New testcase.
* g++.dg/lto/pr69077_1.C: Likewise.
2016-01-12 Jakub Jelinek <jakub@redhat.com>
PR target/69175

View File

@ -0,0 +1,14 @@
// { dg-lto-do link }
// { dg-lto-options { { -O3 -g -flto } } }
// { dg-extra-ld-options "-r -nostdlib" }
struct cStdDev
{
long ns;
virtual double mean() const { return ns; }
};
struct cWeightedStdDev : public cStdDev {
virtual int netPack();
};
int cWeightedStdDev::netPack() { }

View File

@ -0,0 +1,15 @@
struct cStdDev
{
long ns;
virtual double mean() const { return ns; }
};
struct sf
{
void recordScalar(double value);
cStdDev eedStats;
virtual void finish();
};
void sf::finish() {
recordScalar(eedStats.mean());
}