aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2019-06-20 16:18:02 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2019-06-20 14:18:02 +0000
commitd1a7d8de4689f32bf39047f3f2797f7c30ce2777 (patch)
tree50c2d3b91c849342a2e2b7e812c60639b8533e90
parent86f73527aa3556b7d5ead9b03d8a5c91d351a409 (diff)
downloadgcc-d1a7d8de4689f32bf39047f3f2797f7c30ce2777.zip
gcc-d1a7d8de4689f32bf39047f3f2797f7c30ce2777.tar.gz
gcc-d1a7d8de4689f32bf39047f3f2797f7c30ce2777.tar.bz2
tree-ssa-alias.c (aliasing_component_refs_p): Remove ref2_is_decl parameter; it has no use in gimple memory model.
* 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
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/alias-access-path-1.c19
-rw-r--r--gcc/tree-ssa-alias.c23
4 files changed, 36 insertions, 16 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index d25ded6..06e4ef4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 518dada..c1e948d 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..6693a2b
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/alias-access-path-1.c
@@ -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 ();
+}
diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c
index 11f0e8e..111f375 100644
--- a/gcc/tree-ssa-alias.c
+++ b/gcc/tree-ssa-alias.c
@@ -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;
}