mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-21 15:40:55 +08:00
alias-access-path-6.c: New testcase.
* gcc.dg/tree-ssa/alias-access-path-6.c: New testcase. * tree-ssa-alias.c (nonoverlapping_component_refs_p): Do not give up on bitfields; continue searching for different refs appearing later. From-SVN: r272587
This commit is contained in:
parent
78f7607db4
commit
1240df7b40
@ -1,3 +1,9 @@
|
||||
2019-06-22 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
* tree-ssa-alias.c (nonoverlapping_component_refs_p): Do not
|
||||
give up on bitfields; continue searching for different refs
|
||||
appearing later.
|
||||
|
||||
2019-06-21 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
* tree-vect-data-refs.c (vect_find_stmt_data_reference): Handle
|
||||
|
@ -1,3 +1,7 @@
|
||||
2019-06-22 Jan Hubicka <jh@suse.cz>
|
||||
|
||||
* gcc.dg/tree-ssa/alias-access-path-6.c: New testcase.
|
||||
|
||||
2019-06-22 Marek Polacek <polacek@redhat.com>
|
||||
|
||||
PR c++/86476 - noexcept-specifier is a complete-class context.
|
||||
|
29
gcc/testsuite/gcc.dg/tree-ssa/alias-access-path-6.c
Normal file
29
gcc/testsuite/gcc.dg/tree-ssa/alias-access-path-6.c
Normal file
@ -0,0 +1,29 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -fdump-tree-optimized" } */
|
||||
|
||||
/* This tests that nonoveralpping_component_refs does not give up
|
||||
on field delcs and continues looking to find mismatch between
|
||||
a1 and a2. */
|
||||
struct a {
|
||||
int a:3;
|
||||
int b:3;
|
||||
};
|
||||
struct b {struct a a1,a2;};
|
||||
struct c {struct b b[10];} *cptr;
|
||||
struct d {struct c c;} *dptr;
|
||||
int
|
||||
test(int i,int j)
|
||||
{
|
||||
cptr->b[i].a1.a=0;
|
||||
dptr->c.b[j].a2.b=1;
|
||||
return cptr->b[i].a1.a;
|
||||
}
|
||||
int
|
||||
test2(int i,int j)
|
||||
{
|
||||
cptr->b[i].a1.a=1;
|
||||
dptr->c.b[j].a1.a=0;
|
||||
return cptr->b[i].a1.a;
|
||||
}
|
||||
/* { dg-final { scan-tree-dump-times "return 0" 1 "optimized"} } */
|
||||
/* { dg-final { scan-tree-dump-not "return 1" "optimized"} } */
|
@ -1350,19 +1350,16 @@ nonoverlapping_component_refs_p (const_tree x, const_tree y)
|
||||
same. */
|
||||
if (DECL_BIT_FIELD_REPRESENTATIVE (fieldx) == fieldy
|
||||
|| DECL_BIT_FIELD_REPRESENTATIVE (fieldy) == fieldx)
|
||||
{
|
||||
++alias_stats.nonoverlapping_component_refs_p_may_alias;
|
||||
return false;
|
||||
}
|
||||
;
|
||||
/* Different fields of the same record type cannot overlap.
|
||||
??? Bitfields can overlap at RTL level so punt on them. */
|
||||
if (DECL_BIT_FIELD (fieldx) && DECL_BIT_FIELD (fieldy))
|
||||
else if (DECL_BIT_FIELD (fieldx) && DECL_BIT_FIELD (fieldy))
|
||||
;
|
||||
else
|
||||
{
|
||||
++alias_stats.nonoverlapping_component_refs_p_may_alias;
|
||||
return false;
|
||||
++alias_stats.nonoverlapping_component_refs_p_no_alias;
|
||||
return true;
|
||||
}
|
||||
++alias_stats.nonoverlapping_component_refs_p_no_alias;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if (TYPE_UID (typex) < TYPE_UID (typey))
|
||||
|
Loading…
x
Reference in New Issue
Block a user