tree-ssa-alias.c (aliasing_component_refs_p): Remove ref2_is_decl parameter; it has...
authorJan Hubicka <jh@suse.cz>
Thu, 20 Jun 2019 14:18:02 +0000 (16:18 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Thu, 20 Jun 2019 14:18:02 +0000 (14:18 +0000)
* tree-ssa-alias.c (aliasing_component_refs_p): Remove ref2_is_decl
parameter; it has no use in gimple memory model.
(indirect_ref_may_alias_decl_p): Update.

* gcc.c-torture/execute/alias-access-path-1.c: New testcase.

From-SVN: r272510

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/alias-access-path-1.c [new file with mode: 0644]
gcc/tree-ssa-alias.c

index d25ded6909ec6a8ce238477e56dc2da9a261b39e..06e4ef45b66e4b5cfb2787964186561bb35148c2 100644 (file)
@@ -1,3 +1,9 @@
+2019-06-20  Jan Hubicka  <jh@suse.cz>
+
+       * tree-ssa-alias.c (aliasing_component_refs_p): Remove ref2_is_decl
+       parameter; it has no use in gimple memory model.
+       (indirect_ref_may_alias_decl_p): Update.
+
 2019-06-20  Martin Liska  <mliska@suse.cz>
 
        * params.def (PARAM_HASH_TABLE_VERIFICATION_LIMIT): Decrease
index 518dada066f164cf205c6be89eb9f6afe579632b..c1e948d862c940d77b43a70e2e36fc4b9d61f2a8 100644 (file)
@@ -1,3 +1,7 @@
+2019-06-20  Jan Hubicka  <jh@suse.cz>
+
+       * gcc.c-torture/execute/alias-access-path-1.c: New testcase.
+
 2019-06-20  Marek Polacek  <polacek@redhat.com>
 
        PR c++/89873
diff --git a/gcc/testsuite/gcc.c-torture/execute/alias-access-path-1.c b/gcc/testsuite/gcc.c-torture/execute/alias-access-path-1.c
new file mode 100644 (file)
index 0000000..6693a2b
--- /dev/null
@@ -0,0 +1,19 @@
+/* Test that variable
+     int val;
+   may hold value of tyope "struct c" which has same size.
+   This is valid in GIMPLE memory model.  */
+
+struct a {int val;} a={1},a2;
+struct b {struct a a;};
+int val;
+struct c {struct b b;} *cptr=(void *)&val;
+
+int
+main(void)
+{
+  cptr->b.a=a;
+  val = 2;
+  a2=cptr->b.a;
+  if (a2.val == a.val)
+    __builtin_abort ();
+}
index 11f0e8e17847c4f54da4f27abf7c79761889dafc..111f375bb4a66bc46c11d36743cdcce351ad1485 100644 (file)
@@ -850,8 +850,7 @@ type_has_components_p (tree type)
 
 /* Determine if the two component references REF1 and REF2 which are
    based on access types TYPE1 and TYPE2 and of which at least one is based
-   on an indirect reference may alias.  REF2 is the only one that can
-   be a decl in which case REF2_IS_DECL is true.
+   on an indirect reference may alias.  
    REF1_ALIAS_SET, BASE1_ALIAS_SET, REF2_ALIAS_SET and BASE2_ALIAS_SET
    are the respective alias sets.  */
 
@@ -863,8 +862,7 @@ aliasing_component_refs_p (tree ref1,
                           tree ref2,
                           alias_set_type ref2_alias_set,
                           alias_set_type base2_alias_set,
-                          poly_int64 offset2, poly_int64 max_size2,
-                          bool ref2_is_decl)
+                          poly_int64 offset2, poly_int64 max_size2)
 {
   /* If one reference is a component references through pointers try to find a
      common base and apply offset based disambiguation.  This handles
@@ -982,7 +980,7 @@ aliasing_component_refs_p (tree ref1,
          if (TREE_CODE (TREE_TYPE (base1)) == ARRAY_TYPE
              && (!TYPE_SIZE (TREE_TYPE (base1))
                  || TREE_CODE (TYPE_SIZE (TREE_TYPE (base1))) != INTEGER_CST
-                 || (ref == base2 && !ref2_is_decl)))
+                 || ref == base2))
            {
              ++alias_stats.aliasing_component_refs_p_may_alias;
              return true;
@@ -1041,7 +1039,7 @@ aliasing_component_refs_p (tree ref1,
          if (TREE_CODE (TREE_TYPE (base2)) == ARRAY_TYPE
              && (!TYPE_SIZE (TREE_TYPE (base2))
                  || TREE_CODE (TYPE_SIZE (TREE_TYPE (base2))) != INTEGER_CST
-                 || (ref == base1 && !ref2_is_decl)))
+                 || ref == base1))
            {
              ++alias_stats.aliasing_component_refs_p_may_alias;
              return true;
@@ -1089,8 +1087,7 @@ aliasing_component_refs_p (tree ref1,
       return true;
     }
   /* If this is ptr vs. decl then we know there is no ptr ... decl path.  */
-  if (!ref2_is_decl
-      && compare_type_sizes (TREE_TYPE (ref1), type2) >= 0
+  if (compare_type_sizes (TREE_TYPE (ref1), type2) >= 0
       && (!end_struct_ref2
          || compare_type_sizes (TREE_TYPE (ref1),
                                 TREE_TYPE (end_struct_ref2)) >= 0)
@@ -1554,13 +1551,7 @@ indirect_ref_may_alias_decl_p (tree ref1 ATTRIBUTE_UNUSED, tree base1,
                                      offset1, max_size1,
                                      ref2,
                                      ref2_alias_set, base2_alias_set,
-                                     offset2, max_size2, 
-                                     /* Only if the other reference is actual
-                                        decl we can safely check only toplevel
-                                        part of access path 1.  */
-                                     same_type_for_tbaa (TREE_TYPE (dbase2),
-                                                         TREE_TYPE (base2))
-                                     == 1);
+                                     offset2, max_size2);
 
   return true;
 }
@@ -1675,7 +1666,7 @@ indirect_refs_may_alias_p (tree ref1 ATTRIBUTE_UNUSED, tree base1,
                                      offset1, max_size1,
                                      ref2,
                                      ref2_alias_set, base2_alias_set,
-                                     offset2, max_size2, false);
+                                     offset2, max_size2);
 
   return true;
 }