re PR middle-end/87574 (ICE in add_data_member_location_attribute at gcc/gcc/dwarf2out.c:19226 since r264943)
PR middle-end/87574 * cgraphunit.c (cgraph_node::expand_thunk): Force DECL_IGNORED_P on the thunk when expanding to GIMPLE. From-SVN: r265028
This commit is contained in:
parent
8e9558f029
commit
a1a0e08d63
4 changed files with 49 additions and 0 deletions
|
@ -1,3 +1,9 @@
|
|||
2018-10-10 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
PR middle-end/87574
|
||||
* cgraphunit.c (cgraph_node::expand_thunk): Force DECL_IGNORED_P on
|
||||
the thunk when expanding to GIMPLE.
|
||||
|
||||
2018-10-10 Bernd Edlinger <bernd.edlinger@hotmail.de>
|
||||
|
||||
* varasm.c (mergeable_string_section): Don't try to move zero-length
|
||||
|
|
|
@ -1862,6 +1862,12 @@ cgraph_node::expand_thunk (bool output_asm_thunks, bool force_gimple_thunk)
|
|||
DECL_ARGUMENTS. In this case force_gimple_thunk is true. */
|
||||
if (in_lto_p && !force_gimple_thunk)
|
||||
get_untransformed_body ();
|
||||
|
||||
/* We need to force DECL_IGNORED_P when the thunk is created
|
||||
after early debug was run. */
|
||||
if (force_gimple_thunk)
|
||||
DECL_IGNORED_P (thunk_fndecl) = 1;
|
||||
|
||||
a = DECL_ARGUMENTS (thunk_fndecl);
|
||||
|
||||
current_function_decl = thunk_fndecl;
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
2018-10-10 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* g++.dg/other/pr87574.C: New test.
|
||||
|
||||
2018-10-10 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c++/87567 - constexpr rejects call to non-constexpr function.
|
||||
|
|
33
gcc/testsuite/g++.dg/other/pr87574.C
Normal file
33
gcc/testsuite/g++.dg/other/pr87574.C
Normal file
|
@ -0,0 +1,33 @@
|
|||
// PR middle-end/87574
|
||||
// Testcase by David Binderman <dcb314@hotmail.com>
|
||||
|
||||
// { dg-do compile }
|
||||
// { dg-options "-O2 -g -Wno-return-type" }
|
||||
|
||||
class a {
|
||||
public:
|
||||
virtual ~a();
|
||||
};
|
||||
class c {
|
||||
public:
|
||||
enum j {};
|
||||
virtual j d() = 0;
|
||||
};
|
||||
class e : a, c {
|
||||
j d();
|
||||
};
|
||||
class f;
|
||||
class g {
|
||||
public:
|
||||
static g *h();
|
||||
f *i();
|
||||
};
|
||||
class f {
|
||||
public:
|
||||
template <class b> b *l(int);
|
||||
};
|
||||
c::j e::d() {}
|
||||
void m() {
|
||||
for (int k;;)
|
||||
g::h()->i()->l<c>(k)->d();
|
||||
}
|
Loading…
Add table
Reference in a new issue