This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

New testcase committed


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 ();
+}


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]