re PR fortran/72743 (ICE in get_constraint_for_ssa_var, at tree-ssa-structalias.c...
authorChung-Lin Tang <cltang@codesourcery.com>
Thu, 15 Sep 2016 09:46:36 +0000 (09:46 +0000)
committerChung-Lin Tang <cltang@gcc.gnu.org>
Thu, 15 Sep 2016 09:46:36 +0000 (09:46 +0000)
2016-09-15  Chung-Lin Tang  <cltang@codesourcery.com>

PR fortran/72743
* ipa-icf.c (set_alias_uids): New function.
(sem_variable::merge): Use set_alias_uids to set DECL_PT_UID of
all the merged variable's referring aliases.

testsuite/
* gfortran.dg/goacc/pr72743.f90: New test.

From-SVN: r240155

gcc/ChangeLog
gcc/ipa-icf.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/goacc/pr72743.f90 [new file with mode: 0644]

index 0c74a2caec2e9b41bf181f495cdf3f2428461b2e..22c5ffdd628644f1c6c2f5df40282e5bb19cd9fa 100644 (file)
@@ -1,3 +1,10 @@
+2016-09-15  Chung-Lin Tang  <cltang@codesourcery.com>
+
+       PR fortran/72743
+       * ipa-icf.c (set_alias_uids): New function.
+       (sem_variable::merge): Use set_alias_uids to set DECL_PT_UID of
+       all the merged variable's referring aliases.
+
 2016-09-15  Richard Biener  <rguenther@suse.de>
 
        PR tree-optimization/77514
index f29d929cf674ecc409e2e765c94779a98b5bcec1..798d833971e08464247a0e26d1ff7fde2d121d67 100644 (file)
@@ -2133,6 +2133,23 @@ sem_variable::get_hash (void)
   return m_hash;
 }
 
+/* Set all points-to UIDs of aliases pointing to node N as UID.  */
+
+static void
+set_alias_uids (symtab_node *n, int uid)
+{
+  ipa_ref *ref;
+  FOR_EACH_ALIAS (n, ref)
+    {
+      if (dump_file)
+       fprintf (dump_file, "  Setting points-to UID of [%s] as %d\n",
+                xstrdup_for_dump (ref->referring->asm_name ()), uid);
+
+      SET_DECL_PT_UID (ref->referring->decl, uid);
+      set_alias_uids (ref->referring, uid);
+    }
+}
+
 /* Merges instance with an ALIAS_ITEM, where alias, thunk or redirection can
    be applied.  */
 
@@ -2258,12 +2275,11 @@ sem_variable::merge (sem_item *alias_item)
 
       varpool_node::create_alias (alias_var->decl, decl);
       alias->resolve_alias (original);
-      if (DECL_PT_UID_SET_P (original->decl))
-       SET_DECL_PT_UID (alias->decl, DECL_PT_UID (original->decl));
 
       if (dump_file)
-       fprintf (dump_file, "Unified; Variable alias has been created.\n\n");
+       fprintf (dump_file, "Unified; Variable alias has been created.\n");
 
+      set_alias_uids (original, DECL_UID (original->decl));
       return true;
     }
 }
index 906cefbbee795f84e54db9ddd7b23f2f079f0d9c..95ac8706873fc2c1611e6b43ac45a991c09c906b 100644 (file)
@@ -1,3 +1,8 @@
+2016-09-15  Chung-Lin Tang  <cltang@codesourcery.com>
+
+       PR fortran/72743
+       * gfortran.dg/goacc/pr72743.f90: New test.
+
 2016-09-15  Richard Biener  <rguenther@suse.de>
 
        * gcc.dg/fold-reassoc-2.c: Fix dump scan.
diff --git a/gcc/testsuite/gfortran.dg/goacc/pr72743.f90 b/gcc/testsuite/gfortran.dg/goacc/pr72743.f90
new file mode 100644 (file)
index 0000000..a29714b
--- /dev/null
@@ -0,0 +1,15 @@
+! { dg-do compile }
+! { dg-additional-options "-O2" }
+
+program p
+   integer, parameter :: n = 8
+   integer :: i, z(n)
+   z = [(i, i=1,n)]
+   print *, z
+end
+subroutine s
+   integer, parameter :: n = 8
+   integer :: i, z(n)
+   z = [(i, i=1,n)]
+   print *, z
+end