From: Bernd Schmidt Date: Fri, 24 Nov 2000 17:11:10 +0000 (+0000) Subject: New testcase X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=222de5be4569807aa48134cbe09b60861bea5893;p=gcc.git New testcase From-SVN: r37709 --- diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 237ab8f71bd..ba5dadf7bb1 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,7 @@ 2000-11-24 Bernd Schmidt * gcc.dg/sequence-point-1.c: Add some new tests. + * gcc.c-torture/execute/20001124-1.c: New test. 2000-11-24 Nathan Sidwell 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 index 00000000000..c0ec8cf0446 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/execute/20001124-1.c @@ -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 (); +}