From 3b456f8da3721618ae706b0c4eaa438cccb0dbd2 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Wed, 2 Jan 2019 16:23:27 +0100 Subject: 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 --- gcc/varpool.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'gcc/varpool.c') diff --git a/gcc/varpool.c b/gcc/varpool.c index 2aa59f9..edffa55 100644 --- a/gcc/varpool.c +++ b/gcc/varpool.c @@ -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)) -- cgit v1.1