From 438789ffe3864516f7b30b532894b2e64f016165 Mon Sep 17 00:00:00 2001
From: Martin Jambor <mjambor@suse.cz>
Date: Mon, 4 Jan 2010 19:18:54 +0100
Subject: [PATCH] re PR tree-optimization/42366 (ICE in ipa_write_node_info, at
 ipa-prop.c:2023)

2010-01-04  Martin Jambor  <mjambor@suse.cz>

	PR tree-optimization/42366
	* ipa-cp.c (ipcp_init_stage): Always call ipa_compute_jump_functions on
	edges with variable number of parameters.
	* ipa-prop.c (ipa_write_node_info): Stream out uses_analysis_done
	flag instead of asserting it.
	(ipa_read_node_info): Read uses_analysis_done flag.

From-SVN: r155630
---
 gcc/ChangeLog  |  9 +++++++++
 gcc/ipa-cp.c   | 11 ++---------
 gcc/ipa-prop.c |  3 ++-
 3 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ad67466278a1..a3ada177f40a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,12 @@
+2010-01-04  Martin Jambor  <mjambor@suse.cz>
+
+	PR tree-optimization/42366
+	* ipa-cp.c (ipcp_init_stage): Always call ipa_compute_jump_functions on
+	edges with variable number of parameters.
+	* ipa-prop.c (ipa_write_node_info): Stream out uses_analysis_done
+	flag instead of asserting it.
+	(ipa_read_node_info): Read uses_analysis_done flag.
+
 2010-01-04  Richard Guenther  <rguenther@suse.de>
 
 	* tree-ssa-sccvn.c (vn_reference_op_compute_hash): Use
diff --git a/gcc/ipa-cp.c b/gcc/ipa-cp.c
index b6e471230fa8..66de8db7c0a4 100644
--- a/gcc/ipa-cp.c
+++ b/gcc/ipa-cp.c
@@ -633,15 +633,8 @@ ipcp_init_stage (void)
 	  ipa_count_arguments (cs);
 	  if (ipa_get_cs_argument_count (IPA_EDGE_REF (cs))
 	      != ipa_get_param_count (IPA_NODE_REF (cs->callee)))
-	    {
-	      /* Handle cases of functions with
-	         a variable number of parameters.  */
-	      ipa_set_called_with_variable_arg (IPA_NODE_REF (cs->callee));
-	      if (flag_indirect_inlining)
-	        ipa_compute_jump_functions (cs);
-	    }
-	  else
-	    ipa_compute_jump_functions (cs);
+	    ipa_set_called_with_variable_arg (IPA_NODE_REF (cs->callee));
+	  ipa_compute_jump_functions (cs);
 	}
     }
 }
diff --git a/gcc/ipa-prop.c b/gcc/ipa-prop.c
index 9387f0e0779a..9fbd9d804e92 100644
--- a/gcc/ipa-prop.c
+++ b/gcc/ipa-prop.c
@@ -2018,9 +2018,9 @@ ipa_write_node_info (struct output_block *ob, struct cgraph_node *node)
 
   bp = bitpack_create ();
   bp_pack_value (bp, info->called_with_var_arguments, 1);
+  bp_pack_value (bp, info->uses_analysis_done, 1);
   gcc_assert (info->modification_analysis_done
 	      || ipa_get_param_count (info) == 0);
-  gcc_assert (info->uses_analysis_done || ipa_get_param_count (info) == 0);
   gcc_assert (!info->node_enqueued);
   gcc_assert (!info->ipcp_orig_node);
   for (j = 0; j < ipa_get_param_count (info); j++)
@@ -2063,6 +2063,7 @@ ipa_read_node_info (struct lto_input_block *ib, struct cgraph_node *node,
 
   bp = lto_input_bitpack (ib);
   info->called_with_var_arguments = bp_unpack_value (bp, 1);
+  info->uses_analysis_done = bp_unpack_value (bp, 1);
   if (ipa_get_param_count (info) != 0)
     {
       info->modification_analysis_done = true;
-- 
GitLab