From d1a7d8de4689f32bf39047f3f2797f7c30ce2777 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Thu, 20 Jun 2019 16:18:02 +0200 Subject: [PATCH] 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 --- gcc/ChangeLog | 6 +++++ gcc/testsuite/ChangeLog | 4 ++++ .../execute/alias-access-path-1.c | 19 +++++++++++++++ gcc/tree-ssa-alias.c | 23 ++++++------------- 4 files changed, 36 insertions(+), 16 deletions(-) create mode 100644 gcc/testsuite/gcc.c-torture/execute/alias-access-path-1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d25ded6909e..06e4ef45b66 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2019-06-20 Jan Hubicka + + * 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 * params.def (PARAM_HASH_TABLE_VERIFICATION_LIMIT): Decrease diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 518dada066f..c1e948d862c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2019-06-20 Jan Hubicka + + * gcc.c-torture/execute/alias-access-path-1.c: New testcase. + 2019-06-20 Marek Polacek 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 00000000000..6693a2b176d --- /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 11f0e8e1784..111f375bb4a 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; } -- 2.30.2