Subject: bin/2827: gcc 2.7.2.1 fixes compiler bugs
To: None <gnats-bugs@gnats.netbsd.org>
From: Mike Long <mike.long@analog.com>
List: netbsd-bugs
Date: 10/09/1996 23:07:09
>Number:         2827
>Category:       bin
>Synopsis:       gcc 2.7.2.1 fixes compiler bugs
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    bin-bug-people (Utility Bug People)
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Wed Oct  9 20:20:01 1996
>Last-Modified:
>Originator:     Mike Long <mike.long@analog.com>
>Organization:
	Church of the Anti-Gates
>Release:        1.2_BETA
>Environment:
System: NetBSD azathoth 1.2_BETA NetBSD 1.2_BETA (AZATHOTH) #100: Mon Sep 2 21:56:30 EDT 1996 root@azathoth:/usr/src/sys/arch/i386/compile/AZATHOTH i386

>Description:
	A number of code-generation and other bugs were fixed in gcc
version 2.7.2.1.
>How-To-Repeat:
	cd /usr/src; make build
>Fix:
	Apply the patches below, most of which were adapted from the
FSF's gcc-2.7.2-2.7.2.1.diff patch file.  I've tested these changes on
the i386; other ports' mileage may vary.

*** src/gnu/usr.bin/gcc/gcc2netbsd.orig	Fri Jun  7 07:22:58 1996
--- src/gnu/usr.bin/gcc/gcc2netbsd	Thu Aug 15 00:55:51 1996
***************
*** 24,28 ****
  #
  
! $version = "2.7.2";
  
  # definitions ...
--- 24,28 ----
  #
  
! $version = "2.7.2.1";
  
  # definitions ...

*** src/gnu/usr.bin/gcc/arch/arm32/config.h.orig	Sat May 18 07:15:27 1996
--- src/gnu/usr.bin/gcc/arch/arm32/config.h	Thu Aug 15 00:56:26 1996
***************
*** 1,4 ****
  #define NETBSD_NATIVE
! #define DEFAULT_TARGET_VERSION "2.7.2"
  #define DEFAULT_TARGET_MACHINE "NetBSD/arm32"
  #include "arm32/xm-netbsd.h"
--- 1,4 ----
  #define NETBSD_NATIVE
! #define DEFAULT_TARGET_VERSION "2.7.2.1"
  #define DEFAULT_TARGET_MACHINE "NetBSD/arm32"
  #include "arm32/xm-netbsd.h"

*** src/gnu/usr.bin/gcc/arch/arm32/arm32.md.orig	Sat May 18 07:15:26 1996
--- src/gnu/usr.bin/gcc/arch/arm32/arm32.md	Thu Aug 15 00:32:53 1996
***************
*** 3317,3323 ****
  (define_expand "movsicc"
    [(set (match_operand:SI 0 "register_operand" "")
! 	(if_then_else (match_operand 1 "comparison_operator" "")
! 		      (match_operand:SI 2 "arm_not_operand" "")
! 		      (match_operand:SI 3 "register_operand" "")))]
    "0"
    "
--- 3317,3323 ----
  (define_expand "movsicc"
    [(set (match_operand:SI 0 "register_operand" "")
! 	(if_then_else:SI (match_operand 1 "comparison_operator" "")
! 			 (match_operand:SI 2 "arm_not_operand" "")
! 			 (match_operand:SI 3 "register_operand" "")))]
    "0"
    "
***************
*** 3332,3338 ****
  (define_expand "movsfcc"
    [(set (match_operand:SF 0 "register_operand" "")
! 	(if_then_else (match_operand 1 "comparison_operator" "")
! 		      (match_operand:SF 2 "nonmemory_operand" "")
! 		      (match_operand:SF 3 "register_operand" "")))]
    ""
    "
--- 3332,3338 ----
  (define_expand "movsfcc"
    [(set (match_operand:SF 0 "register_operand" "")
! 	(if_then_else:SF (match_operand 1 "comparison_operator" "")
! 			 (match_operand:SF 2 "nonmemory_operand" "")
! 			 (match_operand:SF 3 "register_operand" "")))]
    ""
    "
***************
*** 3347,3353 ****
  (define_expand "movdfcc"
    [(set (match_operand:DF 0 "register_operand" "")
! 	(if_then_else (match_operand 1 "comparison_operator" "")
! 		      (match_operand:DF 2 "nonmemory_operand" "")
! 		      (match_operand:DF 3 "register_operand" "")))]
    "TARGET_HARD_FLOAT"
    "
--- 3347,3353 ----
  (define_expand "movdfcc"
    [(set (match_operand:DF 0 "register_operand" "")
! 	(if_then_else:DF (match_operand 1 "comparison_operator" "")
! 			 (match_operand:DF 2 "nonmemory_operand" "")
! 			 (match_operand:DF 3 "register_operand" "")))]
    "TARGET_HARD_FLOAT"
    "
***************
*** 3362,3369 ****
  (define_insn "*movsicc_insn"
    [(set (match_operand:SI 0 "register_operand" "=r,r")
! 	(if_then_else (match_operator 1 "comparison_operator" 
! 		       [(reg 24) (const_int 0)])
! 		      (match_operand:SI 2 "arm_not_operand" "rI,K")
! 		      (match_operand:SI 3 "register_operand" "0,0")))]
    ""
    "@
--- 3362,3369 ----
  (define_insn "*movsicc_insn"
    [(set (match_operand:SI 0 "register_operand" "=r,r")
! 	(if_then_else:SI (match_operator 1 "comparison_operator" 
! 		          [(reg 24) (const_int 0)])
! 			 (match_operand:SI 2 "arm_not_operand" "rI,K")
! 			 (match_operand:SI 3 "register_operand" "0,0")))]
    ""
    "@
***************
*** 3375,3382 ****
  (define_insn "*movsfcc_hard_insn"
    [(set (match_operand:SF 0 "register_operand" "=f")
! 	(if_then_else (match_operator 1 "comparison_operator" 
! 		       [(reg 24) (const_int 0)])
! 		      (match_operand:SF 2 "register_operand" "f")
! 		      (match_operand:SF 3 "register_operand" "0")))]
    "TARGET_HARD_FLOAT"
    "mvf%d1s\\t%0, %2"
--- 3375,3382 ----
  (define_insn "*movsfcc_hard_insn"
    [(set (match_operand:SF 0 "register_operand" "=f")
! 	(if_then_else:SF (match_operator 1 "comparison_operator" 
! 			  [(reg 24) (const_int 0)])
! 			 (match_operand:SF 2 "register_operand" "f")
! 			 (match_operand:SF 3 "register_operand" "0")))]
    "TARGET_HARD_FLOAT"
    "mvf%d1s\\t%0, %2"
***************
*** 3386,3393 ****
  (define_insn "*movsfcc_soft_insn"
    [(set (match_operand:SF 0 "register_operand" "=r")
! 	(if_then_else (match_operator 1 "comparison_operator"
! 		       [(reg 24) (const_int 0)])
! 		      (match_operand:SF 2 "register_operand" "r")
! 		      (match_operand:SF 3 "register_operand" "0")))]
    "TARGET_SOFT_FLOAT"
    "mov%d1\\t%0, %2"
--- 3386,3393 ----
  (define_insn "*movsfcc_soft_insn"
    [(set (match_operand:SF 0 "register_operand" "=r")
! 	(if_then_else:SF (match_operator 1 "comparison_operator"
! 			  [(reg 24) (const_int 0)])
! 			 (match_operand:SF 2 "register_operand" "r")
! 			 (match_operand:SF 3 "register_operand" "0")))]
    "TARGET_SOFT_FLOAT"
    "mov%d1\\t%0, %2"
***************
*** 3397,3404 ****
  (define_insn "*movdfcc_insn"
    [(set (match_operand:DF 0 "register_operand" "=f")
! 	(if_then_else (match_operator 1 "comparison_operator"
! 		       [(reg 24) (const_int 0)])
! 		      (match_operand:DF 2 "register_operand" "f")
! 		      (match_operand:DF 3 "register_operand" "0")))]
    "TARGET_HARD_FLOAT"
    "mvf%d1d\\t%0, %2"
--- 3397,3404 ----
  (define_insn "*movdfcc_insn"
    [(set (match_operand:DF 0 "register_operand" "=f")
! 	(if_then_else:DF (match_operator 1 "comparison_operator"
! 			  [(reg 24) (const_int 0)])
! 			 (match_operand:DF 2 "register_operand" "f")
! 			 (match_operand:DF 3 "register_operand" "0")))]
    "TARGET_HARD_FLOAT"
    "mvf%d1d\\t%0, %2"

*** src/gnu/usr.bin/gcc/arch/i386/config.h.orig	Mon Dec 11 15:13:55 1995
--- src/gnu/usr.bin/gcc/arch/i386/config.h	Thu Aug 15 00:56:33 1996
***************
*** 1,4 ****
  #define NETBSD_NATIVE
! #define DEFAULT_TARGET_VERSION "2.7.2"
  #define DEFAULT_TARGET_MACHINE "NetBSD/i386"
  #include "i386/xm-netbsd.h"
--- 1,4 ----
  #define NETBSD_NATIVE
! #define DEFAULT_TARGET_VERSION "2.7.2.1"
  #define DEFAULT_TARGET_MACHINE "NetBSD/i386"
  #include "i386/xm-netbsd.h"

*** src/gnu/usr.bin/gcc/arch/m68k/config.h.orig	Mon Dec 11 15:14:03 1995
--- src/gnu/usr.bin/gcc/arch/m68k/config.h	Thu Aug 15 00:56:38 1996
***************
*** 1,4 ****
  #define NETBSD_NATIVE
! #define DEFAULT_TARGET_VERSION "2.7.2"
  #define DEFAULT_TARGET_MACHINE "NetBSD/m68k"
  #include "m68k/xm-netbsd.h"
--- 1,4 ----
  #define NETBSD_NATIVE
! #define DEFAULT_TARGET_VERSION "2.7.2.1"
  #define DEFAULT_TARGET_MACHINE "NetBSD/m68k"
  #include "m68k/xm-netbsd.h"

*** src/gnu/usr.bin/gcc/arch/mips/config.h.orig	Mon Dec 11 15:14:15 1995
--- src/gnu/usr.bin/gcc/arch/mips/config.h	Thu Aug 15 00:56:42 1996
***************
*** 1,4 ****
  #define NETBSD_NATIVE
! #define DEFAULT_TARGET_VERSION "2.7.2"
  #define DEFAULT_TARGET_MACHINE "NetBSD/mips"
  #include "mips/xm-netbsd.h"
--- 1,4 ----
  #define NETBSD_NATIVE
! #define DEFAULT_TARGET_VERSION "2.7.2.1"
  #define DEFAULT_TARGET_MACHINE "NetBSD/mips"
  #include "mips/xm-netbsd.h"

*** src/gnu/usr.bin/gcc/arch/mips/mips.c.orig	Mon Dec 11 15:14:18 1995
--- src/gnu/usr.bin/gcc/arch/mips/mips.c	Thu Aug 15 00:32:55 1996
***************
*** 4929,4933 ****
        rtx entry_parm;
  
!       if (TYPE_NEEDS_CONSTRUCTING (passed_type))
  	{
  	  passed_type = build_pointer_type (passed_type);
--- 4929,4933 ----
        rtx entry_parm;
  
!       if (TREE_ADDRESSABLE (passed_type))
  	{
  	  passed_type = build_pointer_type (passed_type);

*** src/gnu/usr.bin/gcc/arch/ns32k/config.h.orig	Mon Dec 11 15:14:22 1995
--- src/gnu/usr.bin/gcc/arch/ns32k/config.h	Thu Aug 15 00:56:46 1996
***************
*** 1,4 ****
  #define NETBSD_NATIVE
! #define DEFAULT_TARGET_VERSION "2.7.2"
  #define DEFAULT_TARGET_MACHINE "NetBSD/ns32k"
  #include "ns32k/xm-netbsd.h"
--- 1,4 ----
  #define NETBSD_NATIVE
! #define DEFAULT_TARGET_VERSION "2.7.2.1"
  #define DEFAULT_TARGET_MACHINE "NetBSD/ns32k"
  #include "ns32k/xm-netbsd.h"

*** src/gnu/usr.bin/gcc/arch/sparc/config.h.orig	Mon Dec 11 15:14:25 1995
--- src/gnu/usr.bin/gcc/arch/sparc/config.h	Thu Aug 15 00:56:51 1996
***************
*** 1,4 ****
  #define NETBSD_NATIVE
! #define DEFAULT_TARGET_VERSION "2.7.2"
  #define DEFAULT_TARGET_MACHINE "NetBSD/sparc"
  #include "sparc/xm-netbsd.h"
--- 1,4 ----
  #define NETBSD_NATIVE
! #define DEFAULT_TARGET_VERSION "2.7.2.1"
  #define DEFAULT_TARGET_MACHINE "NetBSD/sparc"
  #include "sparc/xm-netbsd.h"

*** src/gnu/usr.bin/gcc/arch/sparc/sparc.h.orig	Mon Dec 11 15:14:28 1995
--- src/gnu/usr.bin/gcc/arch/sparc/sparc.h	Thu Aug 15 00:32:56 1996
***************
*** 622,637 ****
  	  fixed_regs[regno] = 1;				\
        }								\
!     if (! TARGET_APP_REGS)					\
!       {								\
! 	fixed_regs[2] = 1;					\
! 	fixed_regs[3] = 1;					\
! 	fixed_regs[4] = 1;					\
!       }								\
!     else							\
!       {								\
! 	fixed_regs[2] = 0;					\
! 	fixed_regs[3] = 0;					\
! 	fixed_regs[4] = TARGET_MEDANY != 0;			\
!       }								\
      if (TARGET_FLAT)						\
        {								\
--- 622,629 ----
  	  fixed_regs[regno] = 1;				\
        }								\
!     /* Don't unfix g2-g4 if they were fixed with -ffixed-.  */	\
!     fixed_regs[2] |= ! TARGET_APP_REGS;				\
!     fixed_regs[3] |= ! TARGET_APP_REGS;				\
!     fixed_regs[4] |= ! TARGET_APP_REGS || TARGET_MEDANY;	\
      if (TARGET_FLAT)						\
        {								\

*** src/gnu/usr.bin/gcc/arch/vax/config.h.orig	Mon Dec 11 15:14:34 1995
--- src/gnu/usr.bin/gcc/arch/vax/config.h	Thu Aug 15 00:56:55 1996
***************
*** 1,4 ****
  #define NETBSD_NATIVE
! #define DEFAULT_TARGET_VERSION "2.7.2"
  #define DEFAULT_TARGET_MACHINE "NetBSD/vax"
  #include "vax/xm-netbsd.h"
--- 1,4 ----
  #define NETBSD_NATIVE
! #define DEFAULT_TARGET_VERSION "2.7.2.1"
  #define DEFAULT_TARGET_MACHINE "NetBSD/vax"
  #include "vax/xm-netbsd.h"

*** src/gnu/usr.bin/gcc/arch/vax/vax.h.orig	Mon Dec 11 15:14:35 1995
--- src/gnu/usr.bin/gcc/arch/vax/vax.h	Thu Aug 15 00:32:56 1996
***************
*** 964,968 ****
      { if (GET_CODE (SET_SRC (EXP)) == CALL)			\
  	CC_STATUS_INIT;						\
!       else if (GET_CODE (SET_DEST (EXP)) != PC)			\
  	{ cc_status.flags = 0;					\
  	  cc_status.value1 = SET_DEST (EXP);			\
--- 964,969 ----
      { if (GET_CODE (SET_SRC (EXP)) == CALL)			\
  	CC_STATUS_INIT;						\
!       else if (GET_CODE (SET_DEST (EXP)) != ZERO_EXTRACT	\
! 	       && GET_CODE (SET_DEST (EXP)) != PC)		\
  	{ cc_status.flags = 0;					\
  	  cc_status.value1 = SET_DEST (EXP);			\

*** src/gnu/usr.bin/gcc/arch/vax/vax.md.orig	Sun Dec 31 07:11:48 1995
--- src/gnu/usr.bin/gcc/arch/vax/vax.md	Thu Aug 15 00:32:57 1996
***************
*** 1342,1345 ****
--- 1342,1346 ----
        = adj_offsettable_operand (operands[0], INTVAL (operands[2]) / 8);
  
+   CC_STATUS_INIT;
    if (INTVAL (operands[1]) == 8)
      return \"movb %3,%0\";

*** src/gnu/usr.bin/gcc/common/c-typeck.c.orig	Mon Dec 11 15:15:55 1995
--- src/gnu/usr.bin/gcc/common/c-typeck.c	Thu Aug 15 00:32:52 1996
***************
*** 5724,5727 ****
--- 5724,5729 ----
    else if (last != 0 && TREE_CODE (last) != INTEGER_CST)
      error_init ("nonconstant array index in initializer%s", " for `%s'", NULL);
+   else if (! constructor_unfilled_index)
+     error_init ("array index in non-array initializer%s", " for `%s'", NULL);
    else if (tree_int_cst_lt (first, constructor_unfilled_index))
      error_init ("duplicate array index in initializer%s", " for `%s'", NULL);

*** src/gnu/usr.bin/gcc/common/expr.c.orig	Mon Dec 11 15:16:26 1995
--- src/gnu/usr.bin/gcc/common/expr.c	Thu Aug 15 00:32:59 1996
***************
*** 4583,4587 ****
  	   never change.  Languages where it can never change should
  	   also set TREE_STATIC.  */
! 	RTX_UNCHANGING_P (temp) = TREE_READONLY (exp) | TREE_STATIC (exp);
  	return temp;
        }
--- 4583,4587 ----
  	   never change.  Languages where it can never change should
  	   also set TREE_STATIC.  */
! 	RTX_UNCHANGING_P (temp) = TREE_READONLY (exp) & TREE_STATIC (exp);
  	return temp;
        }

*** src/gnu/usr.bin/gcc/common/loop.c.orig	Mon Dec 11 15:17:57 1995
--- src/gnu/usr.bin/gcc/common/loop.c	Thu Aug 15 00:34:01 1996
***************
*** 6042,6046 ****
  	  /* Can replace with any giv that was reduced and
  	     that has (MULT_VAL != 0) and (ADD_VAL == 0).
! 	     Require a constant for MULT_VAL, so we know it's nonzero.  */
  
  	  for (v = bl->giv; v; v = v->next_iv)
--- 6042,6048 ----
  	  /* Can replace with any giv that was reduced and
  	     that has (MULT_VAL != 0) and (ADD_VAL == 0).
! 	     Require a constant for MULT_VAL, so we know it's nonzero.
! 	     ??? We disable this optimization to avoid potential
! 	     overflows.  */
  
  	  for (v = bl->giv; v; v = v->next_iv)
***************
*** 6048,6052 ****
  		&& v->add_val == const0_rtx
  		&& ! v->ignore && ! v->maybe_dead && v->always_computable
! 		&& v->mode == mode)
  	      {
  		if (! eliminate_p)
--- 6050,6055 ----
  		&& v->add_val == const0_rtx
  		&& ! v->ignore && ! v->maybe_dead && v->always_computable
! 		&& v->mode == mode
! 		&& 0)
  	      {
  		if (! eliminate_p)
***************
*** 6068,6077 ****
  	  /* Look for a giv with (MULT_VAL != 0) and (ADD_VAL != 0);
  	     replace test insn with a compare insn (cmp REDUCED_GIV ADD_VAL).
! 	     Require a constant for MULT_VAL, so we know it's nonzero.  */
  
  	  for (v = bl->giv; v; v = v->next_iv)
  	    if (CONSTANT_P (v->mult_val) && v->mult_val != const0_rtx
  		&& ! v->ignore && ! v->maybe_dead && v->always_computable
! 		&& v->mode == mode)
  	      {
  		if (! eliminate_p)
--- 6071,6087 ----
  	  /* Look for a giv with (MULT_VAL != 0) and (ADD_VAL != 0);
  	     replace test insn with a compare insn (cmp REDUCED_GIV ADD_VAL).
! 	     Require a constant for MULT_VAL, so we know it's nonzero.
! 	     ??? Do this only if ADD_VAL is a pointer to avoid a potential
! 	     overflow problem.  */
  
  	  for (v = bl->giv; v; v = v->next_iv)
  	    if (CONSTANT_P (v->mult_val) && v->mult_val != const0_rtx
  		&& ! v->ignore && ! v->maybe_dead && v->always_computable
! 		&& v->mode == mode
! 		&& (GET_CODE (v->add_val) == SYMBOL_REF
! 		    || GET_CODE (v->add_val) == LABEL_REF
! 		    || GET_CODE (v->add_val) == CONST
! 		    || (GET_CODE (v->add_val) == REG
! 			&& REGNO_POINTER_FLAG (REGNO (v->add_val)))))
  	      {
  		if (! eliminate_p)
***************
*** 6128,6132 ****
  	  for (v = bl->giv; v; v = v->next_iv)
  	    if (CONSTANT_P (v->mult_val) && INTVAL (v->mult_val) > 0
! 		&& CONSTANT_P (v->add_val)
  		&& ! v->ignore && ! v->maybe_dead && v->always_computable
  		&& v->mode == mode)
--- 6138,6146 ----
  	  for (v = bl->giv; v; v = v->next_iv)
  	    if (CONSTANT_P (v->mult_val) && INTVAL (v->mult_val) > 0
! 		&& (GET_CODE (v->add_val) == SYMBOL_REF
! 		    || GET_CODE (v->add_val) == LABEL_REF
! 		    || GET_CODE (v->add_val) == CONST
! 		    || (GET_CODE (v->add_val) == REG
! 			&& REGNO_POINTER_FLAG (REGNO (v->add_val))))
  		&& ! v->ignore && ! v->maybe_dead && v->always_computable
  		&& v->mode == mode)
***************
*** 6161,6170 ****
  	  
  	  /* Look for giv with positive constant mult_val and nonconst add_val.
! 	     Insert insns to calculate new compare value.  */
  
  	  for (v = bl->giv; v; v = v->next_iv)
  	    if (CONSTANT_P (v->mult_val) && INTVAL (v->mult_val) > 0
  		&& ! v->ignore && ! v->maybe_dead && v->always_computable
! 		&& v->mode == mode)
  	      {
  		rtx tem;
--- 6175,6186 ----
  	  
  	  /* Look for giv with positive constant mult_val and nonconst add_val.
! 	     Insert insns to calculate new compare value.  
! 	     ??? Turn this off due to possible overflow.  */
  
  	  for (v = bl->giv; v; v = v->next_iv)
  	    if (CONSTANT_P (v->mult_val) && INTVAL (v->mult_val) > 0
  		&& ! v->ignore && ! v->maybe_dead && v->always_computable
! 		&& v->mode == mode
! 		&& 0)
  	      {
  		rtx tem;
***************
*** 6192,6201 ****
  	    {
  	      /* Look for giv with constant positive mult_val and nonconst
! 		 add_val. Insert insns to compute new compare value.  */
  
  	      for (v = bl->giv; v; v = v->next_iv)
  		if (CONSTANT_P (v->mult_val) && INTVAL (v->mult_val) > 0
  		    && ! v->ignore && ! v->maybe_dead && v->always_computable
! 		    && v->mode == mode)
  		  {
  		    rtx tem;
--- 6208,6219 ----
  	    {
  	      /* Look for giv with constant positive mult_val and nonconst
! 		 add_val. Insert insns to compute new compare value. 
! 		 ??? Turn this off due to possible overflow.  */
  
  	      for (v = bl->giv; v; v = v->next_iv)
  		if (CONSTANT_P (v->mult_val) && INTVAL (v->mult_val) > 0
  		    && ! v->ignore && ! v->maybe_dead && v->always_computable
! 		    && v->mode == mode
! 		    && 0)
  		  {
  		    rtx tem;

*** src/gnu/usr.bin/gcc/common/stor-layout.c.orig	Mon Dec 11 15:19:02 1995
--- src/gnu/usr.bin/gcc/common/stor-layout.c	Thu Aug 15 00:33:12 1996
***************
*** 438,442 ****
  	     or because it exceeds maximum_field_alignment.  */
  	  if (const_size / type_align
! 	      != (const_size + field_size - 1) / type_align)
  	    const_size = CEIL (const_size, type_align) * type_align;
  	}
--- 438,442 ----
  	     or because it exceeds maximum_field_alignment.  */
  	  if (const_size / type_align
! 	      != (const_size + (field_size % type_align) - 1) / type_align)
  	    const_size = CEIL (const_size, type_align) * type_align;
  	}

*** src/gnu/usr.bin/gcc/common/version.c.orig	Mon Dec 11 15:19:12 1995
--- src/gnu/usr.bin/gcc/common/version.c	Thu Aug 15 00:33:29 1996
***************
*** 1 ****
! char *version_string = "2.7.2";
--- 1 ----
! char *version_string = "2.7.2.1";

*** src/gnu/usr.bin/gcc/cc1plus/decl2.c.orig	Mon Dec 11 15:15:02 1995
--- src/gnu/usr.bin/gcc/cc1plus/decl2.c	Thu Aug 15 00:32:57 1996
***************
*** 1364,1368 ****
  
    value = grokdeclarator (declarator, declspecs, FIELD, init != 0,
! 			  raises, attrlist);
    if (! value)
      return value; /* friend or constructor went bad.  */
--- 1364,1368 ----
  
    value = grokdeclarator (declarator, declspecs, FIELD, init != 0,
! 			  raises, NULL_TREE);
    if (! value)
      return value; /* friend or constructor went bad.  */
***************
*** 1477,1480 ****
--- 1477,1484 ----
    /* The corresponding pop_obstacks is in cp_finish_decl.  */
    push_obstacks_nochange ();
+ 
+   if (attrlist)
+     cplus_decl_attributes (value, TREE_PURPOSE (attrlist),
+ 			   TREE_VALUE (attrlist));
  
    if (TREE_CODE (value) == VAR_DECL)

*** src/gnu/usr.bin/gcc/cc1plus/lex.c.orig	Mon Dec 11 15:15:06 1995
--- src/gnu/usr.bin/gcc/cc1plus/lex.c	Thu Aug 15 00:32:58 1996
***************
*** 3314,3317 ****
--- 3314,3325 ----
  		  token_buffer[1] = 0;
  		}
+ 	      else if (ptr->token == NAMESPACE)
+ 		{
+ 		  static int warned;
+ 		  if (! warned)
+ 		    warning ("namespaces are mostly broken in this version of g++");
+ 
+ 		  warned = 1;
+ 		}
  
  	      value = (int) ptr->token;

*** src/gnu/usr.bin/gcc/libobjc/hash.c.orig	Mon Dec 11 15:19:33 1995
--- src/gnu/usr.bin/gcc/libobjc/hash.c	Thu Aug 15 00:33:11 1996
***************
*** 244,250 ****
    if (node)
      do {
!       if ((*cache->compare_func)(node->key, key))
          retval = node->value;
!       else
          node = node->next;
      } while (!retval && node);
--- 244,251 ----
    if (node)
      do {
!       if ((*cache->compare_func)(node->key, key)) {
          retval = node->value;
!               break;
!       } else
          node = node->next;
      } while (!retval && node);

>Audit-Trail:
>Unformatted: