re PR lto/88130 (ICE in copy_function_or_variable, at lto-streamer-out.c:2315 since r260963)

PR lto/88130
	* varpool.c (varpool_node::ctor_useable_for_folding_p): Also return
	false at WPA time when body was removed.
	* g++.dg/torture/pr88130.C: New testcase.

From-SVN: r267515
This commit is contained in:
Jan Hubicka 2019-01-02 16:23:27 +01:00 committed by Jan Hubicka
parent 0588e28824
commit 3b456f8da3
4 changed files with 43 additions and 5 deletions

View File

@ -1,3 +1,9 @@
2019-01-02 Jan Hubicka <hubicka@ucw.cz>
PR lto/88130
* varpool.c (varpool_node::ctor_useable_for_folding_p): Also return
false at WPA time when body was removed.
2019-01-02 Martin Liska <mliska@suse.cz>
PR tree-optimization/88650

View File

@ -1,3 +1,8 @@
2019-01-02 Jan Hubicka <hubicka@ucw.cz>
PR lto/88130
* g++.dg/torture/pr88130.C: New testcase.
2019-01-02 Martin Liska <mliska@suse.cz>
PR tree-optimization/88650

View File

@ -0,0 +1,27 @@
/* { dg-do compile } */
/* { dg-options "-flto" } */
/* { dg-require-effective-target lto } */
class a {
public:
static const long b = 1;
};
struct c {
enum d { e };
};
class C;
class f {
public:
f(c::d);
template <typename g> C operator<=(g);
};
class C {
public:
template <typename h> void operator!=(h &);
};
void i() {
f j(c::e);
try {
j <= 0 != a::b;
} catch (...) {
}
}

View File

@ -335,16 +335,16 @@ varpool_node::ctor_useable_for_folding_p (void)
if (TREE_THIS_VOLATILE (decl))
return false;
/* Avoid attempts to load constructors that was not streamed. */
if (in_lto_p && DECL_INITIAL (real_node->decl) == error_mark_node
&& real_node->body_removed)
return false;
/* If we do not have a constructor, we can't use it. */
if (DECL_INITIAL (real_node->decl) == error_mark_node
&& !real_node->lto_file_data)
return false;
/* Avoid attempts to load constructors that was not streamed. */
if (flag_ltrans && DECL_INITIAL (real_node->decl) == error_mark_node
&& real_node->body_removed)
return false;
/* Vtables are defined by their types and must match no matter of interposition
rules. */
if (DECL_VIRTUAL_P (decl))