ipa-chkp.c (chkp_maybe_create_clone): Create alias reference when cloning alias node.
authorIlya Enkovich <ilya.enkovich@intel.com>
Wed, 3 Jun 2015 11:31:08 +0000 (11:31 +0000)
committerIlya Enkovich <ienkovich@gcc.gnu.org>
Wed, 3 Jun 2015 11:31:08 +0000 (11:31 +0000)
gcc/

* ipa-chkp.c (chkp_maybe_create_clone): Create alias
reference when cloning alias node.

gcc/testsuite/

* gcc.dg/lto/chkp-removed-alias_0.c: New.

From-SVN: r224074

gcc/ChangeLog
gcc/ipa-chkp.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/lto/chkp-removed-alias_0.c [new file with mode: 0644]

index 9f054ff145724bc7470451b3531e05f7bb57bb4d..d83cf50c7d9d256b32c4e99c451886745d41aa27 100644 (file)
@@ -1,3 +1,8 @@
+2015-06-03  Ilya Enkovich  <ilya.enkovich@intel.com>
+
+       * ipa-chkp.c (chkp_maybe_create_clone): Create alias
+       reference when cloning alias node.
+
 2015-06-03  Martin Liska  <mliska@suse.cz>
 
        * alloc-pool.h (struct pool_usage): Correct space padding.
index c7102915cbf36601f81f1d8e378cf1b60db9f8c5..87e21cae83c0b061da7242bce278e05199dc649a 100644 (file)
@@ -616,12 +616,7 @@ chkp_maybe_create_clone (tree fndecl)
 
       /* Clone all aliases.  */
       for (i = 0; node->iterate_direct_aliases (i, ref); i++)
-       {
-         struct cgraph_node *alias = dyn_cast <cgraph_node *> (ref->referring);
-         struct cgraph_node *chkp_alias
-           = chkp_maybe_create_clone (alias->decl);
-         chkp_alias->create_reference (clone, IPA_REF_ALIAS, NULL);
-       }
+       chkp_maybe_create_clone (ref->referring->decl);
 
       /* Clone all thunks.  */
       for (e = node->callers; e; e = e->next_caller)
@@ -645,7 +640,10 @@ chkp_maybe_create_clone (tree fndecl)
 
          ref = node->ref_list.first_reference ();
          if (ref)
-           chkp_maybe_create_clone (ref->referred->decl);
+           {
+             target = chkp_maybe_create_clone (ref->referred->decl);
+             clone->create_reference (target, IPA_REF_ALIAS);
+           }
 
          if (node->alias_target)
            {
index 12bf61c614e7c3d6cee8246eed816a8d57342027..55672821460d5ca5bb0c69b92681e2747a057f42 100644 (file)
@@ -1,3 +1,7 @@
+2015-06-03  Ilya Enkovich  <ilya.enkovich@intel.com>
+
+       * gcc.dg/lto/chkp-removed-alias_0.c: New.
+
 2015-06-03  Ilya Enkovich  <ilya.enkovich@intel.com>
 
        * gcc.dg/lto/chkp-privatize-1_0.c: New.
diff --git a/gcc/testsuite/gcc.dg/lto/chkp-removed-alias_0.c b/gcc/testsuite/gcc.dg/lto/chkp-removed-alias_0.c
new file mode 100644 (file)
index 0000000..96d728d
--- /dev/null
@@ -0,0 +1,28 @@
+/* { dg-lto-do link } */
+/* { dg-require-effective-target mpx } */
+/* { dg-lto-options { { -O2 -flto -flto-partition=max -fcheck-pointer-bounds -mmpx } } } */
+
+int test1 (const char *c)
+{
+  return c[0] * 2;
+}
+
+int test2 (const char *c)
+{
+  return c[1] * 3;
+}
+
+int test1_alias (const char *c) __attribute__ ((alias ("test1")));
+int test2_alias (const char *c) __attribute__ ((alias ("test2")));
+
+struct S
+{
+  int (*fnptr[2]) (const char *);
+} S;
+
+struct S s = {test1_alias, test2_alias};
+
+int main (int argc, const char **argv)
+{
+  return s.fnptr[argc] (argv[0]);
+}