Since expand_thunk no longer overrides the DECL_IGNORED_P setting on the thunk
from the front-end in every case, duplicate_thunk_for_node may create a new
thunk without DECL_IGNORED_P set and this doesn't play with inlining and early
debug info generation; fixed by forcing DECL_IGNORED_P as before in this case.
Bootstrapped/regtested on x86-64/Linux, applied on the mainline as obvious.
2018-11-08 Eric Botcazou <ebotca...@adacore.com>
PR middle-end/87916
* cgraphclones.c (duplicate_thunk_for_node): Also set DECL_IGNORED_P.
2018-11-08 Eric Botcazou <ebotca...@adacore.com>
* g++.dg/other/pr87916.C: New test.
--
Eric Botcazou
// PR middle-end/87916
// Testcase by Martin Liška <mar...@gcc.gnu.org>
// { dg-do compile }
// { dg-options "-O2 -g" }
// { dg-additional-options "-fPIC" { target fpic } }
struct a {
virtual ~a();
};
template <typename b> class c {
public:
class d {
public:
d(c);
b *operator->();
};
};
int e, f;
class g {
public:
class h {
public:
virtual void j(g &, int &, bool) = 0;
};
c<h> k();
int *l();
int *m();
};
int *g::l() try {
for (c<h>::d i(k());;)
i->j(*this, e, true);
} catch (int) {
return 0;
}
int *g::m() try {
for (c<h>::d i(k());;)
i->j(*this, f, false);
} catch (int) {
return 0;
}
struct n : a, g::h {
void o();
void j(g &, int &, bool) { o(); }
};
Index: cgraphclones.c
===================================================================
--- cgraphclones.c (revision 265866)
+++ cgraphclones.c (working copy)
@@ -321,6 +321,10 @@ duplicate_thunk_for_node (cgraph_node *t
"artificial_thunk");
SET_DECL_ASSEMBLER_NAME (new_decl, DECL_NAME (new_decl));
+ /* We need to force DECL_IGNORED_P because the new thunk is created after
+ early debug was run. */
+ DECL_IGNORED_P (new_decl) = 1;
+
new_thunk = cgraph_node::create (new_decl);
set_new_clone_decl_and_node_flags (new_thunk);
new_thunk->definition = true;