mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-14 06:50:27 +08:00
re PR tree-optimization/42703 (ICE in generate_subtree_copies with out of bounds array access)
2010-01-13 Martin Jambor <mjambor@suse.cz> PR tree-optimization/42703 * tree-sra.c (analyze_access_subtree): Check that we can build a reference to the original data within the aggregate. * testsuite/gcc.c-torture/compile/pr42703.c: New test. From-SVN: r155863
This commit is contained in:
parent
1d21a8e566
commit
6dc93b16c6
@ -1,3 +1,9 @@
|
||||
2010-01-13 Martin Jambor <mjambor@suse.cz>
|
||||
|
||||
PR tree-optimization/42703
|
||||
* tree-sra.c (analyze_access_subtree): Check that we can build a
|
||||
reference to the original data within the aggregate.
|
||||
|
||||
2010-01-13 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/42705
|
||||
|
@ -1,3 +1,8 @@
|
||||
2010-01-13 Martin Jambor <mjambor@suse.cz>
|
||||
|
||||
PR tree-optimization/42703
|
||||
* testsuite/gcc.c-torture/compile/pr42703.c: New test.
|
||||
|
||||
2010-01-13 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/42705
|
||||
|
12
gcc/testsuite/gcc.c-torture/compile/pr42703.c
Normal file
12
gcc/testsuite/gcc.c-torture/compile/pr42703.c
Normal file
@ -0,0 +1,12 @@
|
||||
__extension__ typedef unsigned long long int uint64_t;
|
||||
typedef uint64_t ScmUInt64;
|
||||
void swapb64(ScmUInt64 *loc)
|
||||
{
|
||||
union {
|
||||
ScmUInt64 l;
|
||||
unsigned char c[4];
|
||||
} dd;
|
||||
unsigned char t;
|
||||
dd.l = *loc;
|
||||
(t = dd.c[3], dd.c[3] = dd.c[4], dd.c[4] = t);
|
||||
}
|
@ -1659,7 +1659,13 @@ analyze_access_subtree (struct access *root, bool allow_replacements,
|
||||
|
||||
if (allow_replacements && scalar && !root->first_child
|
||||
&& (root->grp_hint
|
||||
|| (direct_read && root->grp_write)))
|
||||
|| (direct_read && root->grp_write))
|
||||
/* We must not ICE later on when trying to build an access to the
|
||||
original data within the aggregate even when it is impossible to do in
|
||||
a defined way like in the PR 42703 testcase. Therefore we check
|
||||
pre-emptively here that we will be able to do that. */
|
||||
&& build_ref_for_offset (NULL, TREE_TYPE (root->base), root->offset,
|
||||
root->type, false))
|
||||
{
|
||||
if (dump_file && (dump_flags & TDF_DETAILS))
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user