diff options
author | Bernd Schmidt <bernds@redhat.co.uk> | 2000-11-24 17:11:10 +0000 |
---|---|---|
committer | Bernd Schmidt <bernds@gcc.gnu.org> | 2000-11-24 17:11:10 +0000 |
commit | 222de5be4569807aa48134cbe09b60861bea5893 (patch) | |
tree | 2d55d7896edfe0fc68ab88e9f51635b350f7bf36 /gcc | |
parent | 1510057a32b1646c235117aaed4ab54536d1d18a (diff) | |
download | gcc-222de5be4569807aa48134cbe09b60861bea5893.zip gcc-222de5be4569807aa48134cbe09b60861bea5893.tar.gz gcc-222de5be4569807aa48134cbe09b60861bea5893.tar.bz2 |
New testcase
From-SVN: r37709
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/ChangeLog | 1 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/execute/20001124-1.c | 76 |
2 files changed, 77 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 237ab8f..ba5dadf 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 index 0000000..c0ec8cf --- /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 (); +} |