Article View: gnu.gcc.bug
Article #6305sparc delay bug test case
From: Mark Bromley
Date: Wed, 13 Dec 1995 00:00
Date: Wed, 13 Dec 1995 00:00
84 lines
2560 bytes
2560 bytes
A follow up to my previous bug report. This is a small test case that
illustrates the problem. The function delaybug will return 100 when
it is clear from the initialization of set_mask and position[0].w_pawn
that this should not happen. Build by
gcc -msupersparc -O2 -o bug smallbug.c -static -Xlinker -align -Xlinker _position
The -Xlinker -align -Xlinker _position is required to be able to
compute at compile time what the errant address will be.
struct {
unsigned long long w_pawn;
unsigned long long b_pawn;
} position[32];
unsigned long long set_mask[64];
unsigned long long file_mask[8];
int delaybug (int ply, int x)
{
int faults = 0;
int rpfile;
int npfile;
int bpfile;
int i;
if (x < 3) {
rpfile=2;
npfile=1;
bpfile=0;
}
else if (x > 4) {
rpfile=7;
npfile=6;
bpfile=5;
}
else {
faults+= (6) ;
}
if (!faults) {
if ((( position[ ply ].w_pawn ) & ( set_mask[rpfile+8] )) );
else if ((( position[ ply ].w_pawn ) & ( set_mask[rpfile+16] )) )
faults+= (4) ;
else if ((( position[ ply ].w_pawn ) & ( set_mask[rpfile+24] )) )
faults+= (9) ;
/* BUG BUG BUG */
/* The bug makes the reference to position[ply].w_pawn actually refer
* to set_mask[24] (when position has been page aligned) */
if ((( position[ ply ].w_pawn ) & ( set_mask[npfile+8] )) )
faults += 100;
else if ((( position[ ply ].w_pawn ) & ( set_mask[npfile+16] )) )
faults+= (3) ;
else if ((( position[ ply ].w_pawn ) & ( set_mask[npfile+24] )) )
faults+= (9) ;
else if (! (( position[ ply ].w_pawn ) & ( file_mask[npfile] )) ) {
faults+= (12) ;
if (! (( position[ ply ].b_pawn ) & ( file_mask[npfile] )) )
faults+= (15) ;
}
if (faults > 1) {
if ((( position[ ply ].w_pawn ) & ( set_mask[bpfile+8] )) );
}
}
return faults;
}
main ()
{
int faults;
position[0].w_pawn = 1;
set_mask[18] = 1;
set_mask[24] = 2;
set_mask[9] = 2;
faults = delaybug (0, 0);
if (faults >= 100)
printf ("error\n");
}
Technical Details
Message-ID:
<199512132046.PAA09632@gate3.fmr.com>Path:
arc1-ca.pugleaf.net!unknown!not-for-mailShow Full Headers
Complete Article Headers
X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 113d02,9d7c995b21c44e53,start X-Google-Attributes: gid113d02,public From: a200739@vantage.fmr.COM (Mark Bromley) Subject: sparc delay bug test case Date: 1995/12/13 Message-ID: <199512132046.PAA09632@gate3.fmr.com> X-Deja-AN: 121757914 distribution: gnu sender: daemon@cis.ohio-state.edu organization: GNUs Not Usenet newsgroups: gnu.gcc.bug