aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2008-05-27 13:21:07 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2008-05-27 13:21:07 +0000
commita46fc136fc682ea3d0429e6ac1084712fe18b612 (patch)
tree19d39919b6075de840b977d6bd83de0f9444a5ad
parent6fe2f65a17ba8ccadca8e944ce11833bfcbcfb48 (diff)
downloadgcc-a46fc136fc682ea3d0429e6ac1084712fe18b612.zip
gcc-a46fc136fc682ea3d0429e6ac1084712fe18b612.tar.gz
gcc-a46fc136fc682ea3d0429e6ac1084712fe18b612.tar.bz2
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
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/pr36339.c32
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa/loadpre8.c2
-rw-r--r--gcc/tree-ssa-alias.c16
5 files changed, 61 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index bbe6eec..b0ccae4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,11 @@
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
* tree-ssa-address.c (add_to_parts): Deal with non-pointer
bases.
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index d1eb120..815ab8a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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.
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr36339.c b/gcc/testsuite/gcc.c-torture/execute/pr36339.c
new file mode 100644
index 0000000..c4f36dd
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/pr36339.c
@@ -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;
+}
+
diff --git a/gcc/testsuite/gcc.dg/tree-ssa/loadpre8.c b/gcc/testsuite/gcc.dg/tree-ssa/loadpre8.c
index a4d2e50..6be2b3e 100644
--- a/gcc/testsuite/gcc.dg/tree-ssa/loadpre8.c
+++ b/gcc/testsuite/gcc.dg/tree-ssa/loadpre8.c
@@ -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" } } */
diff --git a/gcc/tree-ssa-alias.c b/gcc/tree-ssa-alias.c
index 7ce016b..983e321 100644
--- a/gcc/tree-ssa-alias.c
+++ b/gcc/tree-ssa-alias.c
@@ -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