aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAndrew Pinski <pinskia@physics.uc.edu>2005-07-12 17:02:54 +0000
committerAndrew Pinski <pinskia@gcc.gnu.org>2005-07-12 10:02:54 -0700
commitfd5d2c3eb8be24888508f421c852442a64b1d96b (patch)
tree297d8a54a0ca613be8f063e03b65974b41a32d09 /gcc
parent019b02f12fe985b0ba72565e4d10b33c62c7836b (diff)
downloadgcc-fd5d2c3eb8be24888508f421c852442a64b1d96b.zip
gcc-fd5d2c3eb8be24888508f421c852442a64b1d96b.tar.gz
gcc-fd5d2c3eb8be24888508f421c852442a64b1d96b.tar.bz2
re PR tree-optimization/22335 (DOM creates mis-matched types)
2005-07-12 Andrew Pinski <pinskia@physics.uc.edu> PR tree-opt/22335 * gcc.dg/pr22335-1.c: New test. * gcc.dg/pr22335-2.c: New test. From-SVN: r101930
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.dg/pr22335-1.c10
-rw-r--r--gcc/testsuite/gcc.dg/pr22335-2.c39
3 files changed, 55 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 6502977..914f9a5 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2005-07-12 Andrew Pinski <pinskia@physics.uc.edu>
+
+ PR tree-opt/22335
+ * gcc.dg/pr22335-1.c: New test.
+ * gcc.dg/pr22335-2.c: New test.
+
2005-07-12 Volker Reichelt <reichelt@igpm.rwth-aachen.de>
PR c++/20172
diff --git a/gcc/testsuite/gcc.dg/pr22335-1.c b/gcc/testsuite/gcc.dg/pr22335-1.c
new file mode 100644
index 0000000..a2a760b
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr22335-1.c
@@ -0,0 +1,10 @@
+/* { dg-do compile } */
+/* { dg-options "-O1 -fdelete-null-pointer-checks" } */
+int t(int *a)
+{
+ int i;
+ *a = 1;
+ i = a == 0;
+ return i;
+}
+
diff --git a/gcc/testsuite/gcc.dg/pr22335-2.c b/gcc/testsuite/gcc.dg/pr22335-2.c
new file mode 100644
index 0000000..afba955
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr22335-2.c
@@ -0,0 +1,39 @@
+/* { dg-do compile } */
+/* { dg-options "-O2" } */
+void abort(void) __attribute__((__noreturn__));
+typedef struct {
+ int container;
+} edge_iterator;
+struct ls_expr
+{
+ int index;
+ int stores;
+ struct ls_expr * next;
+};
+struct ls_expr * pre_ldst_mems;
+edge_iterator ei;
+void
+store_motion (void)
+{
+ struct ls_expr * ptr, **prev_next_ptr_ptr;
+ edge_iterator ei1;
+ edge_iterator ei2;
+ int a = ptr != ((void *)0);
+ for (ptr = pre_ldst_mems, prev_next_ptr_ptr = &pre_ldst_mems;
+ ptr != ((void *)0);
+ ptr = *prev_next_ptr_ptr)
+ if (!((ptr)->stores))
+ *prev_next_ptr_ptr = ptr->next;
+ else
+ prev_next_ptr_ptr = &ptr->next;
+
+ for (ptr = pre_ldst_mems; ptr != 0; ptr = ptr->next)
+ ;
+ ei1 = ei;
+ ei2 = ei1;
+ if (!ei2.container)
+ abort ();
+ ei2 = ei1;
+ if (!ei2.container)
+ abort ();
+}