OSDN Git Service

New testcase
authorbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 24 Nov 2000 17:11:10 +0000 (17:11 +0000)
committerbernds <bernds@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 24 Nov 2000 17:11:10 +0000 (17:11 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@37709 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/execute/20001124-1.c [new file with mode: 0644]

index 237ab8f..ba5dadf 100644 (file)
@@ -1,6 +1,7 @@
 2000-11-24  Bernd Schmidt  <bernds@redhat.co.uk>
 
        * gcc.dg/sequence-point-1.c: Add some new tests.
+       * gcc.c-torture/execute/20001124-1.c: New test.
 
 2000-11-24  Nathan Sidwell  <nathan@codesourcery.com>
 
diff --git a/gcc/testsuite/gcc.c-torture/execute/20001124-1.c b/gcc/testsuite/gcc.c-torture/execute/20001124-1.c
new file mode 100644 (file)
index 0000000..c0ec8cf
--- /dev/null
@@ -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 ();
+}