[gnu.gcc.bug] Bug in gcc 1.31

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