re PR lto/67699 (ICE (segfault) compiling a const array with -flto)
authorRichard Biener <rguenther@suse.de>
Thu, 24 Sep 2015 11:01:14 +0000 (11:01 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Thu, 24 Sep 2015 11:01:14 +0000 (11:01 +0000)
2015-09-24  Richard Biener  <rguenther@suse.de>

PR lto/67699
* lto-cgraph.c (compute_ltrans_boundary): Do not stream
abstract origins.

* g++.dg/pr67699.C: New testcase.

From-SVN: r228084

gcc/ChangeLog
gcc/lto-cgraph.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/pr67699.C [new file with mode: 0644]

index 7bc8e91855ba04a2c640b969c50263e895c19af4..ed7224fa3a74bd77b4f40fca0b5afb11d1a969e1 100644 (file)
@@ -1,3 +1,9 @@
+2015-09-24  Richard Biener  <rguenther@suse.de>
+
+       PR lto/67699
+       * lto-cgraph.c (compute_ltrans_boundary): Do not stream
+       abstract origins.
+
 2015-09-24  Thomas Schwinge  <thomas@codesourcery.com>
 
        * tree-object-size.c (plus_stmt_object_size)
index d70537dbd0757bd179d41fd23f4872b5ae900cc9..51f31c8cd2bb9215a9609165b8a642c3d77887d9 100644 (file)
@@ -895,14 +895,6 @@ compute_ltrans_boundary (lto_symtab_encoder_t in_encoder)
       add_node_to (encoder, node, true);
       lto_set_symtab_encoder_in_partition (encoder, node);
       create_references (encoder, node);
-      /* For proper debug info, we need to ship the origins, too.  */
-      if (DECL_ABSTRACT_ORIGIN (node->decl))
-       {
-         struct cgraph_node *origin_node
-         = cgraph_node::get_create (DECL_ABSTRACT_ORIGIN (node->decl));
-         origin_node->used_as_abstract_origin = true;
-         add_node_to (encoder, origin_node, true);
-       }
     }
   for (lsei = lsei_start_variable_in_partition (in_encoder);
        !lsei_end_p (lsei); lsei_next_variable_in_partition (&lsei))
@@ -914,13 +906,6 @@ compute_ltrans_boundary (lto_symtab_encoder_t in_encoder)
       lto_set_symtab_encoder_in_partition (encoder, vnode);
       lto_set_symtab_encoder_encode_initializer (encoder, vnode);
       create_references (encoder, vnode);
-      /* For proper debug info, we need to ship the origins, too.  */
-      if (DECL_ABSTRACT_ORIGIN (vnode->decl))
-       {
-         varpool_node *origin_node
-           = varpool_node::get (DECL_ABSTRACT_ORIGIN (vnode->decl));
-         lto_set_symtab_encoder_in_partition (encoder, origin_node);
-       }
     }
   /* Pickle in also the initializer of all referenced readonly variables
      to help folding.  Constant pool variables are not shared, so we must
index fe4f67f70009cfb51dff1706921210ca3dc6a9be..02dc90256e814fbd5eca0de9ae31a934d82725a4 100644 (file)
@@ -1,3 +1,8 @@
+2015-09-24  Richard Biener  <rguenther@suse.de>
+
+       PR lto/67699
+       * g++.dg/pr67699.C: New testcase.
+
 2015-09-24  Richard Earnshaw  <rearnsha@arm.com>
 
        PR libgcc/67624
diff --git a/gcc/testsuite/g++.dg/pr67699.C b/gcc/testsuite/g++.dg/pr67699.C
new file mode 100644 (file)
index 0000000..c9ff591
--- /dev/null
@@ -0,0 +1,8 @@
+// { dg-do compile }
+// { dg-require-effective-target lto }
+// { dg-options "-flto" }
+
+template <class T> class foo {
+    foo() { int const bar[2] = {1, 1}; }
+};
+template class foo<int>;