2000-11-24 02:28:22

by Andries E. Brouwer

[permalink] [raw]
Subject: gcc 2.95.2 is buggy

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;
}


2000-11-24 04:40:45

by Chris Wedgwood

[permalink] [raw]
Subject: Re: gcc 2.95.2 is buggy

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


2000-11-24 05:05:15

by Gregory Maxwell

[permalink] [raw]
Subject: Re: gcc 2.95.2 is buggy

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.

2000-11-24 05:17:26

by Alexander Viro

[permalink] [raw]
Subject: Re: gcc 2.95.2 is buggy



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...

2000-11-24 06:41:16

by Peter Samuelson

[permalink] [raw]
Subject: Re: gcc 2.95.2 is buggy


[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

2000-11-24 08:58:20

by kumon

[permalink] [raw]
Subject: Re: gcc 2.95.2 is buggy

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]

2000-11-24 15:54:56

by Tom Rini

[permalink] [raw]
Subject: Re: gcc 2.95.2 is buggy

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/

2000-11-24 16:12:45

by Bernd Schmidt

[permalink] [raw]
Subject: Re: gcc 2.95.2 is buggy

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

2000-11-26 16:40:28

by Alessandro Suardi

[permalink] [raw]
Subject: Re: gcc 2.95.2 is buggy

(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.