pearce@TYCHO.YERKES.UCHICAGO.EDU ("Eric C. Pearce") (02/17/89)
A GCC 1.31 bug report:
The following program was compiled and run on a Sun 3/260 running OS 3.5.
When compiled with -DWITH_CONST a static const int to size an array on the
stack (otherwise it uses a macro for the array size). When compiled with
WITH_CONST defined, it does not work.
Version number and OS details are included in the session transcript.
I would appreciate acknowledgement of receipt of this bug report (so I
know I didn't waste my time making it). Thanks.
==============
bug.c:
#define ARRAY_SIZE 8
static const int Array_size = ARRAY_SIZE;
int function(char* buf)
{
int cnt;
for (cnt = 0; cnt < ARRAY_SIZE; cnt++)
printf("function: buf[%d] = %d\n",cnt,buf[cnt]);
return 0;
}
int main()
{
#ifdef WITH_CONST
char buf[Array_size]; /* Define array with static const */
#else
char buf[ARRAY_SIZE]; /* or with real constant */
#endif
int cnt;
for(cnt = 0; cnt < ARRAY_SIZE; cnt++)
buf[cnt] = cnt;
for (cnt = 0; cnt < ARRAY_SIZE; cnt++)
printf("main: buf[%d] = %d\n",cnt,buf[cnt]);
return function(buf); /* must be in return to be buggy */
}
===============
Transcript of session:
tycho% gcc -v
gcc version 1.31
tycho% head -1 /etc/motd
Sun UNIX 4.2 Release 3.5 (TYCHOAT) #1: Fri Dec 2 14:13:15 CST 1988
tycho% ls -l /usr/src/Gnu/gcc-1.31/tm.h /usr/src/Gnu/gcc-1.31/md
lrwxrwxrwx 1 root 7 Feb 16 11:39 /usr/src/Gnu/gcc-1.31/md -> m68k.md
lrwxrwxrwx 1 root 9 Feb 16 11:39 /usr/src/Gnu/gcc-1.31/tm.h -> tm-sun3.h
tycho% gcc bug.c -o bug ;; This way works!
tycho% bug
main: buf[0] = 0
main: buf[1] = 1
main: buf[2] = 2
main: buf[3] = 3
main: buf[4] = 4
main: buf[5] = 5
main: buf[6] = 6
main: buf[7] = 7
function: buf[0] = 0
function: buf[1] = 1
function: buf[2] = 2
function: buf[3] = 3
function: buf[4] = 4
function: buf[5] = 5
function: buf[6] = 6
function: buf[7] = 7
tycho% gcc -DWITH_CONST bug.c -o bug ;; This way does not work!
tycho% bug
main: buf[0] = 0
main: buf[1] = 1
main: buf[2] = 2
main: buf[3] = 3
main: buf[4] = 4
main: buf[5] = 5
main: buf[6] = 6
main: buf[7] = 7
function: buf[0] = 0 ;; What happened to buf?
function: buf[1] = 0
function: buf[2] = 33
function: buf[3] = -128
function: buf[4] = 14
function: buf[5] = -1
function: buf[6] = -2
function: buf[7] = -92
===================
-Ecp
Eric C. Pearce
pearce@tycho.yerkes.uchicago.edu or pearce@oddjob.uchicago.edu