[gnu.gcc.bug] Can't compile 1.32 on Encore...

boneill@hawk.ulowell.edu (SoftXc Coordinator) (02/01/89)

I had a problem compiling 1.32 on an Encore Multimax. I had 1.31 running
fine. A patch was made to tm-ns32k.h which seems to kill it when it creates
gnulib in the beginning. Here is the result of the make:

	mkdir libtemp
mkdir: libtemp: File exists
*** Error code 1 (ignored)
	cd libtemp;  \
	rm -f gnulib;  \
	for name in _eprintf _builtin_new _builtin_New _builtin_del  _umulsi3 _mulsi3 _udivsi3 _divsi3 _umodsi3 _modsi3  _lshrsi3 _lshlsi3 _ashrsi3 _ashlsi3 _cmpdi2 _ucmpdi2  _divdf3 _muldf3 _negdf2 _adddf3 _subdf3 _cmpdf2  _fixunsdfsi _fixunsdfdi _fixdfsi _fixdfdi  _floatsidf _floatdidf _truncdfsf2 _extendsfdf2  _addsf3 _negsf2 _subsf3 _cmpsf2 _mulsf3 _divsf3 _varargs;  \
	do  \
	  echo ${name};  \
	  rm -f ${name}.c;  \
	  cp ../gnulib.c ${name}.c;  \
	  cc  -O -I.. -c -DL${name} ${name}.c;  \
	  ar qc gnulib ${name}.o;  \
	done
_eprintf
"../tm-ns32k.h", line 475: No name given for declaration
"../tm-ns32k.h", line 475: expected: ';' got: else
"../tm-ns32k.h", line 475: Illegal character
"../tm-ns32k.h", line 476: Illegal character
"../tm-ns32k.h", line 477: Undefined symbol:  used_fregs_buf
"../tm-ns32k.h", line 477: Type mismatch
"../tm-ns32k.h", line 477: Illegal initial value
"../tm-ns32k.h", line 477: Illegal character
"../tm-ns32k.h", line 478: No name given for declaration
"../tm-ns32k.h", line 478: expected: ';' got: while
"../tm-ns32k.h", line 478: Illegal character
"../tm-ns32k.h", line 479: Illegal character
"../tm-ns32k.h", line 480: Illegal character
"../tm-ns32k.h", line 481: Illegal character
"../tm-ns32k.h", line 482: No name given for declaration
"../tm-ns32k.h", line 482: expected: ';' got: else
"../tm-ns32k.h", line 482: Illegal character
"../tm-ns32k.h", line 483: Illegal character
"../tm-ns32k.h", line 484: Illegal character
"../tm-ns32k.h", line 485: warning: old-fashioned initialization
"../tm-ns32k.h", line 485: Illegal variable or expression
"../tm-ns32k.h", line 485: Type mismatch
"../tm-ns32k.h", line 485: Illegal initial value
"../tm-ns32k.h", line 485: expected: ';' got: constant
"../tm-ns32k.h", line 485: Illegal character
"../tm-ns32k.h", line 486: No name given for declaration
"../tm-ns32k.h", line 486: expected: ';' got: '}'
"../tm-ns32k.h", line 486: Illegal character
"../tm-ns32k.h", line 487: Illegal character
"_eprintf.c", line 25: No name given for declaration
"_eprintf.c", line 25: expected: ';' got: '}'
*** Error code 1

Stop.

I think that most of the errors are linked to the first. Here is the
relevant section of the patch, with lines 475-476 preceded with '*' to mark
them, where the first few errors occur. If anyone can think of a cause to
the problem, or a fix, please let me know...

***************
*** 447,472 ****
  #define FUNCTION_PROLOGUE(FILE, SIZE)     \
  { register int regno;						\
!   register int nregs;						\
!   char used_regs_buf[32], *bufp = used_regs_buf;		\
    int used_fregs_buf[8], *fbufp = used_fregs_buf;		\
    extern char call_used_regs[];					\
    MAIN_FUNCTION_PROLOGUE;					\
!   for (regno = 0, nregs = 0; regno < 8; regno++)		\
      if (regs_ever_live[regno] && !call_used_regs[regno]) {	\
!        nregs += 1;						\
!        *bufp++ = 'r'; *bufp++ = regno+'0'; *bufp++ = ',';	\
      }								\
    for (; regno < 16; regno++)					\
      if (regs_ever_live[regno] && !call_used_regs[regno]) {	\
!        *fbufp++ = regno;					\
      }								\
-   if (bufp > used_regs_buf) --bufp;				\
-   *bufp = '\0';							\
-   if (frame_pointer_needed)					\
-     fprintf (FILE, "\tenter [%s],%d\n", used_regs_buf,SIZE);	\
-   else if (nregs == 1)						\
-     fprintf (FILE, "\tmovd %s,tos\n", used_regs_buf);		\
-   else if (nregs) fprintf (FILE, "\tsave [%s]\n", used_regs_buf); \
    *fbufp = -1;							\
    fbufp = used_fregs_buf;					\
    while (*fbufp >= 0)						\
--- 447,478 ----
  #define FUNCTION_PROLOGUE(FILE, SIZE)     \
  { register int regno;						\
!   int used_regs_buf[8], *bufp = used_regs_buf;			\
    int used_fregs_buf[8], *fbufp = used_fregs_buf;		\
    extern char call_used_regs[];					\
    MAIN_FUNCTION_PROLOGUE;					\
!   for (regno = 0; regno < 8; regno++)				\
      if (regs_ever_live[regno] && !call_used_regs[regno]) {	\
!       *bufp++ = regno;						\
      }								\
+   *bufp = -1;							\
    for (; regno < 16; regno++)					\
      if (regs_ever_live[regno] && !call_used_regs[regno]) {	\
!       *fbufp++ = regno;						\
      }								\
    *fbufp = -1;							\
+   bufp = used_regs_buf;						\
+   if (frame_pointer_needed)					\
+     {								\
+       fprintf (FILE, "\tenter [");				\
+       while (*bufp >= 0)					\
+ 	{							\
+ 	  fprintf (FILE, "r%d", *bufp++);			\
+ 	  if (*bufp >= 0)					\
+ 	    fputc (',', FILE);					\
+ 	}							\
+       fprintf (FILE, "],%d\n", SIZE);				\
+     }
*+   else while (*bufp >= 0)					\
*+     fprintf (FILE, "\tmovd r%d,tos\n", *bufp++);		\
    fbufp = used_fregs_buf;					\
    while (*fbufp >= 0)						\

==============================================================================
Brian O'Neill, MS-DOS Software Exchange Coordinator
ArpaNet: boneill@hawk.ulowell.edu 
UUCP: {(backbones),harvard,mit-eddie,et. al.}!ulowell!hawk.ulowell.edu!boneill