aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2011-09-16 16:40:06 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2011-09-16 14:40:06 +0000
commit5548ca3540bccbc908a45942896d635ea5f1c23f (patch)
treedc560379a51d19b0978ff07480f41317ecd72bb1
parent8549d9e16c2b3a127de7b61b6dfb76c67edd612e (diff)
downloadgcc-5548ca3540bccbc908a45942896d635ea5f1c23f.zip
gcc-5548ca3540bccbc908a45942896d635ea5f1c23f.tar.gz
gcc-5548ca3540bccbc908a45942896d635ea5f1c23f.tar.bz2
re PR lto/50430 (Constructors of static external vars are throwed away leading to missed optimizations (and ipa-cp ICE).)
PR lto/50430 * gimple-fold.c (gimple_get_virt_method_for_binfo): Do not ICE on error_mark_node in the DECL_INITIAL of vtable. From-SVN: r178908
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/gimple-fold.c3
2 files changed, 8 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f2b39a5..469aeb3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2011-09-15 Jan Hubicka <jh@suse.cz>
+
+ PR lto/50430
+ * gimple-fold.c (gimple_get_virt_method_for_binfo): Do not ICE on
+ error_mark_node in the DECL_INITIAL of vtable.
+
2011-09-15 Diego Novillo <dnovillo@google.com>
* Makefile.in (SYSROOT_CFLAGS_FOR_TARGET): Define from
diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c
index d8da030..b481c4a 100644
--- a/gcc/gimple-fold.c
+++ b/gcc/gimple-fold.c
@@ -3048,7 +3048,8 @@ gimple_get_virt_method_for_binfo (HOST_WIDE_INT token, tree known_binfo)
if (TREE_CODE (v) != VAR_DECL
|| !DECL_VIRTUAL_P (v)
- || !DECL_INITIAL (v))
+ || !DECL_INITIAL (v)
+ || DECL_INITIAL (v) == error_mark_node)
return NULL_TREE;
gcc_checking_assert (TREE_CODE (TREE_TYPE (v)) == ARRAY_TYPE);
size = tree_low_cst (TYPE_SIZE (TREE_TYPE (TREE_TYPE (v))), 1);