diff mbox

Fix PR62034

Message ID alpine.LSU.2.11.1408061540290.20733@zhemvz.fhfr.qr
State New
Headers show

Commit Message

Richard Biener Aug. 6, 2014, 1:41 p.m. UTC
The following avoids recursing for popping SCCs.

LTO bootstrapped and tested on x86_64-unknown-linux-gnu, applied.

Richard.

2014-08-06  Richard Biener  <rguenther@suse.de>

	PR lto/62034
	* lto-streamer-in.c (lto_input_tree_1): Assert we do not read
	SCCs here.
	(lto_input_tree): Pop SCCs here.
diff mbox

Patch

Index: gcc/lto-streamer-in.c
===================================================================
--- gcc/lto-streamer-in.c	(revision 213660)
+++ gcc/lto-streamer-in.c	(working copy)
@@ -1324,15 +1324,7 @@  lto_input_tree_1 (struct lto_input_block
       streamer_tree_cache_append (data_in->reader_cache, result, hash);
     }
   else if (tag == LTO_tree_scc)
-    {
-      unsigned len, entry_len;
-
-      /* Input and skip the SCC.  */
-      lto_input_scc (ib, data_in, &len, &entry_len);
-
-      /* Recurse.  */
-      return lto_input_tree (ib, data_in);
-    }
+    gcc_unreachable ();
   else
     {
       /* Otherwise, materialize a new node from IB.  */
@@ -1345,7 +1337,15 @@  lto_input_tree_1 (struct lto_input_block
 tree
 lto_input_tree (struct lto_input_block *ib, struct data_in *data_in)
 {
-  return lto_input_tree_1 (ib, data_in, streamer_read_record_start (ib), 0);
+  enum LTO_tags tag;
+
+  /* Input and skip SCCs.  */
+  while ((tag = streamer_read_record_start (ib)) == LTO_tree_scc)
+    {
+      unsigned len, entry_len;
+      lto_input_scc (ib, data_in, &len, &entry_len);
+    }
+  return lto_input_tree_1 (ib, data_in, tag, 0);
 }