Skip to contentSkip to conversation

gcc 2.95.2 is buggy

DISCUSSION [email protected] 9 participants 9 messages Nov 24, 2000 – Nov 26, 2000

lore
Share & tools
lore
#0 lore raw

Yesterday night I wrote

Quoted 1 line

Note: this is not yet a confirmed compiler bug

but in the meantime there is good confirmation.
This really is a bug in gcc 2.95.2.

Quoted 5 lines

From [email protected] Thu Nov 23 10:45:07 2000
Please, could you send me ...

From [email protected] Thu Nov 23 18:00:48 2000 Can we get a show of hands?

Below a demo program.

Andries

-------------------- bug.c ----------------------------- /*
* bug.c - aeb, 001124
*
* This program shows a bug in gcc 2.95.2.
* It should print 0x0 and exit.
* For me it prints 0x84800000.
*
* Compile with:
* gcc -Wall -O2 -o bug bug.c
*/
#include <stdio.h>

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)

{
	printf("0x%x\n", block);
	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 = NULL;
	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);
	return 0;
}

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/

#1 lore raw

On Fri, Nov 24, 2000 at 02:57:45AM +0100, [email protected] wrote:

/*
* bug.c - aeb, 001124
*
* This program shows a bug in gcc 2.95.2.
* It should print 0x0 and exit.
* For me it prints 0x84800000.
*
* Compile with:
* gcc -Wall -O2 -o bug bug.c
*/

taking away -O2 is a 'fix' for now... not a very good one though.

--cw

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/

#3 lore raw
Quoted 5 lines · Gregory Maxwell
Quoted 2 lines · On Fri, Nov 24, 2000 at 02:57:45AM +0100, [email protected] wrote:

but in the meantime there is good confirmation.
This really is a bug in gcc 2.95.2.

... RedHat's GCC snapshot "2.96" handles this case just fine.

Now, if you can isolate the relevant part of the diff between 2.95.2 and RH 2.96...

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/

#4 lore raw
In reply to Gregory Maxwell
Quoted 4 lines · Alexander Viro

On Thu, 23 Nov 2000, Gregory Maxwell wrote:

Quoted 8 lines
Quoted 5 lines · On Fri, Nov 24, 2000 at 02:57:45AM +0100, [email protected] wrote:
Quoted 2 lines

but in the meantime there is good confirmation.
This really is a bug in gcc 2.95.2.

... RedHat's GCC snapshot "2.96" handles this case just fine.

Now, if you can isolate the relevant part of the diff between 2.95.2 and RH 2.96...

Well, now that there is a testcase, has anyone sent this on to the relevant gcc lists? (The CCs I saw haven't)

Signature · 6 lines
Tom Rini (TR1265)
http://gate.crashing.org/~trini/
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/
#5 lore raw
Quoted 2 lines · Tom Rini

Well, now that there is a testcase, has anyone sent this on to the relevant gcc lists? (The CCs I saw haven't)

Yes. I've just sent a fix to gcc-patches.

Bernd

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/

#7 lore raw
Quoted 5 lines · Peter Samuelson

[Chris Wedgwood]

Quoted 1 line

taking away -O2 is a 'fix' for now... not a very good one though.

Not if you want function inlining to work. The kernel *won't compile* without optimization.

Using -O1 still works, at least for the demo program.

--
Computer Systems Laboratory, Fujitsu Labs. [email protected]
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/

#8 lore raw
In reply to [email protected]

(cough) doesn't reproduce on my 2.95.2...

[asuardi@princess misc]$ vi bug.c

(cut'n'paste from Andries' email)

[asuardi@princess misc]$ gcc -Wall -O2 -o bug bug.c [asuardi@princess misc]$ ./bug
0x0
[asuardi@princess misc]$ gcc -v
Reading specs from /usr/lib/gcc-lib/i686-pc-linux-gnu/2.95.2/specs gcc version 2.95.2 19991024 (release)

'bug' binary available upon request.

Ciao,

--alessandro <[email protected]> <[email protected]>

Linux:  kernel 2.2.18p22/2.4.0-t11 glibc-2.1.94 gcc-2.95.2 binutils-2.10.0.33
Oracle: Oracle8i 8.1.6.1.0 Enterprise Edition for Linux
motto:  Tell the truth, there's less to remember.

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
Please read the FAQ at http://www.tux.org/lkml/