summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2005-08-26 21:59:25 +0000
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2005-08-26 21:59:25 +0000
commit724912572b37ccd8531ff7dfeb33d19ed7742b4a (patch)
treeaecc5c5a0b95132be09c81bf4a21447951035238
parent8a6b1a113486eaa17b5c82643cae5f02baf28791 (diff)
downloadppe42-gcc-724912572b37ccd8531ff7dfeb33d19ed7742b4a.tar.gz
ppe42-gcc-724912572b37ccd8531ff7dfeb33d19ed7742b4a.zip
PR rtl-opt/23560
* gcc.c-torture/execute/20050826-2.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@103540 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/execute/20050826-2.c62
2 files changed, 67 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index bfa618af6e7..5ca10c9f488 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2005-08-26 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-opt/23560
+ * gcc.c-torture/execute/20050826-2.c: New test.
+
2005-08-26 Dale Johannesen <dalej@apple.com>
* gcc.dg/20030711-1.c: Modify to work on Darwin.
diff --git a/gcc/testsuite/gcc.c-torture/execute/20050826-2.c b/gcc/testsuite/gcc.c-torture/execute/20050826-2.c
new file mode 100644
index 00000000000..0398049856c
--- /dev/null
+++ b/gcc/testsuite/gcc.c-torture/execute/20050826-2.c
@@ -0,0 +1,62 @@
+/* PR rtl-optimization/23560 */
+
+struct rtattr
+{
+ unsigned short rta_len;
+ unsigned short rta_type;
+};
+
+__attribute__ ((noinline))
+int inet_check_attr (void *r, struct rtattr **rta)
+{
+ int i;
+
+ for (i = 1; i <= 14; i++)
+ {
+ struct rtattr *attr = rta[i - 1];
+ if (attr)
+ {
+ if (attr->rta_len - sizeof (struct rtattr) < 4)
+ return -22;
+ if (i != 9 && i != 8)
+ rta[i - 1] = attr + 1;
+ }
+ }
+ return 0;
+}
+
+extern void abort (void);
+
+int
+main (void)
+{
+ struct rtattr rt[2];
+ struct rtattr *rta[14];
+ int i;
+
+ rt[0].rta_len = sizeof (struct rtattr) + 8;
+ rt[0].rta_type = 0;
+ rt[1] = rt[0];
+ for (i = 0; i < 14; i++)
+ rta[i] = &rt[0];
+ if (inet_check_attr (0, rta) != 0)
+ abort ();
+ for (i = 0; i < 14; i++)
+ if (rta[i] != &rt[i != 7 && i != 8])
+ abort ();
+ for (i = 0; i < 14; i++)
+ rta[i] = &rt[0];
+ rta[1] = 0;
+ rt[1].rta_len -= 8;
+ rta[5] = &rt[1];
+ if (inet_check_attr (0, rta) != -22)
+ abort ();
+ for (i = 0; i < 14; i++)
+ if (i == 1 && rta[i] != 0)
+ abort ();
+ else if (i != 1 && i <= 5 && rta[i] != &rt[1])
+ abort ();
+ else if (i > 5 && rta[i] != &rt[0])
+ abort ();
+ return 0;
+}
OpenPOWER on IntegriCloud