This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
New testcase committed
- To: gcc-patches at gcc dot gnu dot org
- Subject: New testcase committed
- From: Bernd Schmidt <bernds at redhat dot com>
- Date: Fri, 24 Nov 2000 17:12:16 +0000 (GMT)
This is the testcase derived from the Linux kernel that Andries Brouwer
submitted today.
Bernd
* gcc.c-torture/execute/20001124-1.c: New test.
Index: testsuite/gcc.c-torture/execute/20001124-1.c
===================================================================
RCS file: 20001124-1.c
diff -N 20001124-1.c
--- /dev/null Tue May 5 13:32:27 1998
+++ 20001124-1.c Fri Nov 24 09:06:26 2000
@@ -0,0 +1,76 @@
+
+struct inode {
+ long long i_size;
+ struct super_block *i_sb;
+};
+
+struct file {
+ long long f_pos;
+};
+
+struct super_block {
+ int s_blocksize;
+ unsigned char s_blocksize_bits;
+ int s_hs;
+};
+
+static char *
+isofs_bread(unsigned int block)
+{
+ if (block)
+ abort ();
+ exit(0);
+}
+
+static int
+do_isofs_readdir(struct inode *inode, struct file *filp)
+{
+ int bufsize = inode->i_sb->s_blocksize;
+ unsigned char bufbits = inode->i_sb->s_blocksize_bits;
+ unsigned int block, offset;
+ char *bh = 0;
+ int hs;
+
+ if (filp->f_pos >= inode->i_size)
+ return 0;
+
+ offset = filp->f_pos & (bufsize - 1);
+ block = filp->f_pos >> bufbits;
+ hs = inode->i_sb->s_hs;
+
+ while (filp->f_pos < inode->i_size) {
+ if (!bh)
+ bh = isofs_bread(block);
+
+ hs += block << bufbits;
+
+ if (hs == 0)
+ filp->f_pos++;
+
+ if (offset >= bufsize)
+ offset &= bufsize - 1;
+
+ if (*bh)
+ filp->f_pos++;
+
+ filp->f_pos++;
+ }
+ return 0;
+}
+
+struct super_block s;
+struct inode i;
+struct file f;
+
+int
+main(int argc, char **argv)
+{
+ s.s_blocksize = 512;
+ s.s_blocksize_bits = 9;
+ i.i_size = 2048;
+ i.i_sb = &s;
+ f.f_pos = 0;
+
+ do_isofs_readdir(&i,&f);
+ abort ();
+}