Yesterday night I wrote
> 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.
>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;
}
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
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.
On Thu, 23 Nov 2000, Gregory Maxwell wrote:
> 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...
[Chris Wedgwood]
> 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
Peter Samuelson writes:
> [Chris Wedgwood]
> > 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]
On Thu, Nov 23, 2000 at 11:47:04PM -0500, Alexander Viro wrote:
>
>
> On Thu, 23 Nov 2000, Gregory Maxwell wrote:
>
> > 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...
Well, now that there is a testcase, has anyone sent this on to the relevant
gcc lists? (The CCs I saw haven't)
--
Tom Rini (TR1265)
http://gate.crashing.org/~trini/
On Fri, 24 Nov 2000, Tom Rini wrote:
> 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
(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.