mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-06 05:10:29 +08:00
re PR tree-optimization/36339 (not call clobbering variable for non common offset)
2008-05-27 Richard Guenther <rguenther@suse.de> PR tree-optimization/36339 * tree-ssa-alias.c (set_initial_properties): Escaped pt_anything pointers cause all addressable variables to be call clobbered. * gcc.c-torture/execute/pr36339.c: New testcase. * gcc.dg/tree-ssa/loadpre8.c: XFAIL. From-SVN: r136030
This commit is contained in:
parent
6fe2f65a17
commit
a46fc136fc
@ -1,3 +1,9 @@
|
||||
2008-05-27 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/36339
|
||||
* tree-ssa-alias.c (set_initial_properties): Escaped pt_anything
|
||||
pointers cause all addressable variables to be call clobbered.
|
||||
|
||||
2008-05-27 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/36245
|
||||
|
@ -1,3 +1,9 @@
|
||||
2008-05-27 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/36339
|
||||
* gcc.c-torture/execute/pr36339.c: New testcase.
|
||||
* gcc.dg/tree-ssa/loadpre8.c: XFAIL.
|
||||
|
||||
2008-05-27 Eric Botcazou <ebotcazou@adacore.com>
|
||||
|
||||
* gnat.dg/pack9.ad[sb]: New test.
|
||||
|
32
gcc/testsuite/gcc.c-torture/execute/pr36339.c
Normal file
32
gcc/testsuite/gcc.c-torture/execute/pr36339.c
Normal file
@ -0,0 +1,32 @@
|
||||
extern void abort (void);
|
||||
|
||||
typedef unsigned long my_uintptr_t;
|
||||
|
||||
int check_a(my_uintptr_t tagged_ptr);
|
||||
|
||||
int __attribute__((noinline)) try_a(my_uintptr_t x)
|
||||
{
|
||||
my_uintptr_t heap[2];
|
||||
my_uintptr_t *hp = heap;
|
||||
|
||||
hp[0] = x;
|
||||
hp[1] = 0;
|
||||
return check_a((my_uintptr_t)(void*)((char*)hp + 1));
|
||||
}
|
||||
|
||||
int __attribute__((noinline)) check_a(my_uintptr_t tagged_ptr)
|
||||
{
|
||||
my_uintptr_t *hp = (my_uintptr_t*)(void*)((char*)tagged_ptr - 1);
|
||||
|
||||
if (hp[0] == 42 && hp[1] == 0)
|
||||
return 0;
|
||||
return -1;
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
if (try_a(42) < 0)
|
||||
abort ();
|
||||
return 0;
|
||||
}
|
||||
|
@ -93,5 +93,5 @@ rewrite_add_phi_arguments (basic_block bb)
|
||||
get_reaching_def ((get_def_from_ptr (get_phi_result_ptr (phi)))->ssa_name.var);
|
||||
}
|
||||
}
|
||||
/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre"} } */
|
||||
/* { dg-final { scan-tree-dump-times "Eliminated: 1" 1 "pre" { xfail *-*-* } } } */
|
||||
/* { dg-final { cleanup-tree-dump "pre" } } */
|
||||
|
@ -571,6 +571,22 @@ set_initial_properties (struct alias_info *ai)
|
||||
mark_call_clobbered (alias, pi->escape_mask);
|
||||
}
|
||||
}
|
||||
else if (pi->pt_anything)
|
||||
{
|
||||
bitmap_iterator bi;
|
||||
unsigned int j;
|
||||
|
||||
/* If we do not have the points-to set filled out we
|
||||
still need to honor that this escaped pointer points
|
||||
to anything. */
|
||||
EXECUTE_IF_SET_IN_BITMAP (gimple_addressable_vars (cfun),
|
||||
0, j, bi)
|
||||
{
|
||||
tree var = referenced_var (j);
|
||||
if (!unmodifiable_var_p (var))
|
||||
mark_call_clobbered (var, pi->escape_mask);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* If the name tag is call clobbered, so is the symbol tag
|
||||
|
Loading…
x
Reference in New Issue
Block a user