gcc 2.95.2 is buggy
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 intdo_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/
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/
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. -
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/
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/
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/
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/
[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.
Peter
-
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/
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/
(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]$ ./bug0x0
[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/