re PR ipa/66705 (section is missing linker error with -flto -fipa-pta)
authorRichard Biener <rguenther@suse.de>
Thu, 3 Sep 2015 09:24:51 +0000 (09:24 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Thu, 3 Sep 2015 09:24:51 +0000 (09:24 +0000)
2015-09-03  Richard Biener  <rguenther@suse.de>

PR ipa/66705
* tree-ssa-structalias.c (ctor_for_analysis): New function.
(create_variable_info_for_1): Use ctor_for_analysis instead
of get_constructor.
(create_variable_info_for): Likewise.

* g++.dg/lto/pr66705_0.C: New testcase.

From-SVN: r227430

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/lto/pr66705_0.C [new file with mode: 0644]
gcc/tree-ssa-structalias.c

index 77fb2c11084673dae59419ec8ef11f28f1a43492..f20e551f5ed1a66ca30c71a23245aebdd4a3c874 100644 (file)
@@ -1,3 +1,11 @@
+2015-09-03  Richard Biener  <rguenther@suse.de>
+
+       PR ipa/66705
+       * tree-ssa-structalias.c (ctor_for_analysis): New function.
+       (create_variable_info_for_1): Use ctor_for_analysis instead
+       of get_constructor.
+       (create_variable_info_for): Likewise.
+
 2015-09-02  Charles Baylis  <charles.baylis@linaro.org>
 
        * cgraphunit.c (cgraph_node::create_wrapper): Set can_throw_external
index 2c84f9a684bce6c9a64c5c3bab24d9de5ff9a302..97bdd7a10ea4eacf5eb61bf19feec93fc6f5a243 100644 (file)
@@ -1,3 +1,8 @@
+2015-09-03  Richard Biener  <rguenther@suse.de>
+
+       PR ipa/66705
+       * g++.dg/lto/pr66705_0.C: New testcase.
+
 2015-09-02  Balaji V. Iyer  <balaji.v.iyer@intel.com>
 
        PR middle-end/60586
diff --git a/gcc/testsuite/g++.dg/lto/pr66705_0.C b/gcc/testsuite/g++.dg/lto/pr66705_0.C
new file mode 100644 (file)
index 0000000..faf3f2d
--- /dev/null
@@ -0,0 +1,15 @@
+// { dg-lto-do link }
+// { dg-lto-options { { -O2 -flto -flto-partition=max -fipa-pta } } }
+// { dg-extra-ld-options "-r -nostdlib" }
+
+class A {
+public:
+    A();
+};
+int a = 0;
+void foo() {
+    a = 0;
+    A b;
+    for (; a;)
+      ;
+}
index 44979193ca9344a1f5d97f54051ca80a6e5039ef..5800f8c5739c01e9fbdd32f84c32d877657db60a 100644 (file)
@@ -5619,7 +5619,6 @@ create_variable_info_for_1 (tree decl, const char *name)
   auto_vec<fieldoff_s> fieldstack;
   fieldoff_s *fo;
   unsigned int i;
-  varpool_node *vnode;
 
   if (!declsize
       || !tree_fits_uhwi_p (declsize))
@@ -5637,12 +5636,10 @@ create_variable_info_for_1 (tree decl, const char *name)
   /* Collect field information.  */
   if (use_field_sensitive
       && var_can_have_subvars (decl)
-      /* ???  Force us to not use subfields for global initializers
-        in IPA mode.  Else we'd have to parse arbitrary initializers.  */
+      /* ???  Force us to not use subfields for globals in IPA mode.
+        Else we'd have to parse arbitrary initializers.  */
       && !(in_ipa_mode
-          && is_global_var (decl)
-          && (vnode = varpool_node::get (decl))
-          && vnode->get_constructor ()))
+          && is_global_var (decl)))
     {
       fieldoff_s *fo = NULL;
       bool notokay = false;
@@ -5774,13 +5771,13 @@ create_variable_info_for (tree decl, const char *name)
 
          /* If this is a global variable with an initializer and we are in
             IPA mode generate constraints for it.  */
-         if (vnode->get_constructor ()
-             && vnode->definition)
+         ipa_ref *ref;
+         for (unsigned idx = 0; vnode->iterate_reference (idx, ref); ++idx)
            {
              auto_vec<ce_s> rhsc;
              struct constraint_expr lhs, *rhsp;
              unsigned i;
-             get_constraint_for_rhs (vnode->get_constructor (), &rhsc);
+             get_constraint_for_address_of (ref->referred->decl, &rhsc);
              lhs.var = vi->id;
              lhs.offset = 0;
              lhs.type = SCALAR;