Changes for GCC version 2.4.5, from 2.4.3.1.

Changes in files you can reconstruct with etags, makeinfo, and TeX
have been omitted.  You can update these files by executing this
command

   make TAGS info dvi -f Makefile.in

in the directory of GCC sources, provided the necessary tools
(etags, makeinfo, TeX and texi2dvi) are installed.


diff -rc2P -x TAGS -x gcc.info* -x gcc,info -x *-parse.c gcc-2.4.4/ChangeLog gcc-2.4.5/ChangeLog
*** gcc-2.4.4/ChangeLog	Sat Jun 19 05:56:54 1993
--- gcc-2.4.5/ChangeLog	Sun Jun 20 20:07:00 1993
***************
*** 1,2 ****
--- 1,22 ----
+ Sun Jun 20 13:37:00 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* Version 2.4.5 released.
+ 
+ 	* c-common.c (decl_attributes): If first_arg_num is 0, no error for it.
+ 
+ 	* Makefile.in (extraclean): Delete *.gz, and other diff and tar files.
+ 
+ Sun Jun 20 18:09:50 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+ 
+ 	* calls.c (expand_call): In last change, preserve the temp slot.
+ 
+ Sat Jun 19 19:55:43 PDT 1993  Ron Guilmette  (rfg@netcom.com)
+ 
+ 	* dwarfout.c (type_main_variant): New function.
+ 	Use it in place of TYPE_MAIN_VARIANT everywhere in dwarfout.c.
+ 
+ 	* c-decl.c (grokdeclarator):  Avoid the use of macros for ..._TYPE
+ 	nodes in cases where a parameter's type is error_mark_node.
+ 
  Sat Jun 19 03:57:57 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
  
diff -rc2P -x TAGS -x gcc.info* -x gcc,info -x *-parse.c gcc-2.4.4/Makefile.in gcc-2.4.5/Makefile.in
*** gcc-2.4.4/Makefile.in	Fri Jun 18 21:19:06 1993
--- gcc-2.4.5/Makefile.in	Sun Jun 20 19:43:50 1993
***************
*** 1497,1501 ****
  	-rm -f objc/=* objc/"#"* objc/*~*
  	-rm -f objc/*.orig objc/*.rej
! 	-rm -f *.dvi *.oaux *.d *.[zZ] *.tar *.xtar *diff
  	-rm -f *lose config/*lose config/*/*lose
  	-rm -f *.s *.s[0-9] *.i install1.texi config/ChangeLog
--- 1497,1502 ----
  	-rm -f objc/=* objc/"#"* objc/*~*
  	-rm -f objc/*.orig objc/*.rej
! 	-rm -f *.dvi *.oaux *.d *.[zZ] *.gz
! 	-rm -f *.tar *.xtar *diff *.diff.* *.tar.* *.xtar.* *diffs
  	-rm -f *lose config/*lose config/*/*lose
  	-rm -f *.s *.s[0-9] *.i install1.texi config/ChangeLog
diff -rc2P -x TAGS -x gcc.info* -x gcc,info -x *-parse.c gcc-2.4.4/README gcc-2.4.5/README
*** gcc-2.4.4/README	Sat Jun 19 05:16:57 1993
--- gcc-2.4.5/README	Sun Jun 20 19:49:02 1993
***************
*** 1,3 ****
! This directory contains the version 2.4.3 release of the GNU C
  compiler.  It includes all of the support for compiling C++ and
  Objective C, including a run-time library for Objective C.
--- 1,3 ----
! This directory contains the version 2.4.5 release of the GNU C
  compiler.  It includes all of the support for compiling C++ and
  Objective C, including a run-time library for Objective C.
diff -rc2P -x TAGS -x gcc.info* -x gcc,info -x *-parse.c gcc-2.4.4/c-common.c gcc-2.4.5/c-common.c
*** gcc-2.4.4/c-common.c	Fri May 21 15:31:23 1993
--- gcc-2.4.5/c-common.c	Sun Jun 20 13:36:55 1993
***************
*** 321,332 ****
  	    return;
  	  }
! 	/* Verify that first_arg_num points to the last argument, the ... */
! 	while (argument)
! 	  arg_num++, argument = TREE_CHAIN (argument);
! 	if (arg_num != first_arg_num)
  	  {
! 	    error_with_decl (decl,
! 			     "args to be formatted is not ..., for `%s'");
! 	    return;
  	  }
  	
--- 321,335 ----
  	    return;
  	  }
! 	if (first_arg_num != 0)
  	  {
! 	    /* Verify that first_arg_num points to the last arg, the ... */
! 	    while (argument)
! 	      arg_num++, argument = TREE_CHAIN (argument);
! 	    if (arg_num != first_arg_num)
! 	      {
! 		error_with_decl (decl,
! 				 "args to be formatted is not ..., for `%s'");
! 		return;
! 	      }
  	  }
  	
diff -rc2P -x TAGS -x gcc.info* -x gcc,info -x *-parse.c gcc-2.4.4/c-decl.c gcc-2.4.5/c-decl.c
*** gcc-2.4.4/c-decl.c	Fri Jun 11 13:31:23 1993
--- gcc-2.4.5/c-decl.c	Sat Jun 19 18:43:09 1993
***************
*** 4458,4462 ****
  
  	DECL_ARG_TYPE (decl) = type;
! 	main_type = TYPE_MAIN_VARIANT (type);
  	if (main_type == float_type_node)
  	  DECL_ARG_TYPE (decl) = double_type_node;
--- 4458,4464 ----
  
  	DECL_ARG_TYPE (decl) = type;
! 	main_type = (type == error_mark_node
! 		     ? error_mark_node
! 		     : TYPE_MAIN_VARIANT (type));
  	if (main_type == float_type_node)
  	  DECL_ARG_TYPE (decl) = double_type_node;
***************
*** 4464,4468 ****
  	   because we should convert short if it's the same size as int,
  	   but we should not convert long if it's the same size as int.  */
! 	else if (C_PROMOTING_INTEGER_TYPE_P (main_type))
  	  {
  	    if (TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node)
--- 4466,4471 ----
  	   because we should convert short if it's the same size as int,
  	   but we should not convert long if it's the same size as int.  */
! 	else if (TREE_CODE (main_type) != ERROR_MARK
! 		 && C_PROMOTING_INTEGER_TYPE_P (main_type))
  	  {
  	    if (TYPE_PRECISION (type) == TYPE_PRECISION (integer_type_node)
diff -rc2P -x TAGS -x gcc.info* -x gcc,info -x *-parse.c gcc-2.4.4/calls.c gcc-2.4.5/calls.c
*** gcc-2.4.4/calls.c	Mon Jun 14 17:39:54 1993
--- gcc-2.4.5/calls.c	Sun Jun 20 18:20:47 1993
***************
*** 1846,1852 ****
  	     a few machines and TARGET is usually nonzero.  */
  	  if (TYPE_MODE (TREE_TYPE (exp)) == BLKmode)
! 	    target = assign_stack_temp (BLKmode,
! 					int_size_in_bytes (TREE_TYPE (exp)),
! 					1);
  	  else
  	    target = gen_reg_rtx (TYPE_MODE (TREE_TYPE (exp)));
--- 1846,1857 ----
  	     a few machines and TARGET is usually nonzero.  */
  	  if (TYPE_MODE (TREE_TYPE (exp)) == BLKmode)
! 	    {
! 	      target = assign_stack_temp (BLKmode,
! 					  int_size_in_bytes (TREE_TYPE (exp)),
! 					  0);
! 
! 	      /* Save this temp slot around the pop below.  */
! 	      preserve_temp_slots (target);
! 	    }
  	  else
  	    target = gen_reg_rtx (TYPE_MODE (TREE_TYPE (exp)));
diff -rc2P -x TAGS -x gcc.info* -x gcc,info -x *-parse.c gcc-2.4.4/dwarfout.c gcc-2.4.5/dwarfout.c
*** gcc-2.4.4/dwarfout.c	Sun Apr 25 18:10:20 1993
--- gcc-2.4.5/dwarfout.c	Sun Jun 20 14:06:27 1993
***************
*** 763,766 ****
--- 763,786 ----
  }
  
+ inline tree
+ type_main_variant (type)
+      register tree type;
+ {
+   type = TYPE_MAIN_VARIANT (type);
+ 
+   /* There really should be only one main variant among any group of variants
+      of a given type (and all of the MAIN_VARIANT values for all members of
+      the group should point to that one type) but sometimes the C front-end
+      messes this up for array types, so we work around that bug here.  */
+ 
+   if (TREE_CODE (type) == ARRAY_TYPE)
+     {
+       while (type != TYPE_MAIN_VARIANT (type))
+         type = TYPE_MAIN_VARIANT (type);
+     }
+ 
+   return type;
+ }
+ 
  /* Return non-zero if the given type node represents a tagged type.  */
  
***************
*** 1318,1325 ****
        case POINTER_TYPE:
        case REFERENCE_TYPE:
! 	return TYPE_MAIN_VARIANT (root_type (TREE_TYPE (type)));
  
        default:
! 	return TYPE_MAIN_VARIANT (type);
      }
  }
--- 1338,1345 ----
        case POINTER_TYPE:
        case REFERENCE_TYPE:
! 	return type_main_variant (root_type (TREE_TYPE (type)));
  
        default:
! 	return type_main_variant (type);
      }
  }
***************
*** 1456,1460 ****
       itself here.  */
  
!   type = TYPE_MAIN_VARIANT (type);
  
    sprintf (type_label, TYPE_NAME_FMT, TYPE_UID (type));
--- 1476,1480 ----
       itself here.  */
  
!   type = type_main_variant (type);
  
    sprintf (type_label, TYPE_NAME_FMT, TYPE_UID (type));
***************
*** 2187,2192 ****
        {
  	/* This decl represents a formal parameter which was optimized out.  */
!         register tree declared_type = TYPE_MAIN_VARIANT (TREE_TYPE (decl));
!         register tree passed_type = TYPE_MAIN_VARIANT (DECL_ARG_TYPE (decl));
  
  	/* Note that DECL_INCOMING_RTL may be NULL in here, but we handle
--- 2207,2212 ----
        {
  	/* This decl represents a formal parameter which was optimized out.  */
!         register tree declared_type = type_main_variant (TREE_TYPE (decl));
!         register tree passed_type = type_main_variant (DECL_ARG_TYPE (decl));
  
  	/* Note that DECL_INCOMING_RTL may be NULL in here, but we handle
***************
*** 2872,2876 ****
  	mod_u_d_type_attribute (type, decl_const, decl_volatile);
      else
! 	/* We have to get the TYPE_MAIN_VARIANT here (and pass that to the
  	   `user_def_type_attribute' routine) because the ..._TYPE node we
  	   have might simply be a *copy* of some original type node (where
--- 2892,2896 ----
  	mod_u_d_type_attribute (type, decl_const, decl_volatile);
      else
! 	/* We have to get the type_main_variant here (and pass that to the
  	   `user_def_type_attribute' routine) because the ..._TYPE node we
  	   have might simply be a *copy* of some original type node (where
***************
*** 2881,2885 ****
  	   only creates labels for DIEs representing *main variants*, and it
  	   never even knows about non-main-variants.)  */
! 	user_def_type_attribute (TYPE_MAIN_VARIANT (type));
  }
  
--- 2901,2905 ----
  	   only creates labels for DIEs representing *main variants*, and it
  	   never even knows about non-main-variants.)  */
! 	user_def_type_attribute (type_main_variant (type));
  }
  
***************
*** 3911,3915 ****
       the main variant (i.e. the unqualified version) of this type now.  */
  
!   type = TYPE_MAIN_VARIANT (type);
  
    if (TREE_ASM_WRITTEN (type))
--- 3931,3935 ----
       the main variant (i.e. the unqualified version) of this type now.  */
  
!   type = type_main_variant (type);
  
    if (TREE_ASM_WRITTEN (type))
***************
*** 4155,4159 ****
       this type now.  */
  
!   assert (type == TYPE_MAIN_VARIANT (type));
  
    assert (TREE_ASM_WRITTEN (type));
--- 4175,4179 ----
       this type now.  */
  
!   assert (type == type_main_variant (type));
  
    assert (TREE_ASM_WRITTEN (type));
diff -rc2P -x TAGS -x gcc.info* -x gcc,info -x *-parse.c gcc-2.4.4/extend.texi gcc-2.4.5/extend.texi
*** gcc-2.4.4/extend.texi	Sun Jun 13 23:49:07 1993
--- gcc-2.4.5/extend.texi	Sun Jun 20 15:18:26 1993
***************
*** 327,333 ****
  @end example
  
! Nested function definitions must appear in the same part of a function
! as variable definitions; that is, before the first line of code in the
! enclosing function.
  
  It is possible to call the nested function from outside the scope of its
--- 327,333 ----
  @end example
  
! Nested function definitions are permitted within functions in the places
! where variable definitions are allowed; that is, in any block, before
! the first statement in the block.
  
  It is possible to call the nested function from outside the scope of its
diff -rc2P -x TAGS -x gcc.info* -x gcc,info -x *-parse.c gcc-2.4.4/gcc.texi gcc-2.4.5/gcc.texi
*** gcc-2.4.4/gcc.texi	Sat Jun 19 05:15:18 1993
--- gcc-2.4.5/gcc.texi	Sun Jun 20 19:15:33 1993
***************
*** 1740,1743 ****
--- 1740,1768 ----
  #endif
  @end example
+ 
+ @item
+ On various 386 Unix systems derived from System V, including SCO, ISC,
+ and ESIX, you may get error messages about running out of virtual memory
+ while compiling certain programs.
+ 
+ You can prevent this problem by linking GNU CC with the GNU malloc
+ (which thus replaces the malloc that comes with the system).  GNU malloc
+ is available as a separate package, and also in the file
+ @file{src/gmalloc.c} in the GNU Emacs 19 distribution.
+ 
+ If you have installed GNU malloc as a separate library package, use this
+ option when you relink GNU CC:
+ 
+ @example
+ MALLOC=/usr/local/lib/libgmalloc.a 
+ @end example
+ 
+ Alternatively, if you have compiled @file{gmalloc.c} from Emacs 19, copy
+ the object file to @file{gmalloc.o} and use this option when you relink
+ GNU CC:
+ 
+ @example
+ MALLOC=gmalloc.o
+ @end example
  @end itemize
  
diff -rc2P -x TAGS -x gcc.info* -x gcc,info -x *-parse.c gcc-2.4.4/install.texi gcc-2.4.5/install.texi
*** gcc-2.4.4/install.texi	Fri Jun 18 17:16:31 1993
--- gcc-2.4.5/install.texi	Sun Jun 20 19:17:27 1993
***************
*** 291,295 ****
  
  @item i386-*-sco
! Compilation with RCC is recommended.
  
  @item i386-ibm-aix
--- 291,304 ----
  
  @item i386-*-sco
! Compilation with RCC is recommended.  Also, it may be a good idea to
! link with GNU malloc instead of the malloc that comes with the system.
! 
! @item i386-*-isc
! It may be good idea to link with GNU malloc instead of the malloc that
! comes with the system.
! 
! @item i386-*-esix
! It may be good idea to link with GNU malloc instead of the malloc that
! comes with the system.
  
  @item i386-ibm-aix
diff -rc2P -x TAGS -x gcc.info* -x gcc,info -x *-parse.c gcc-2.4.4/invoke.texi gcc-2.4.5/invoke.texi
*** gcc-2.4.4/invoke.texi	Sun Jun 13 22:04:15 1993
--- gcc-2.4.5/invoke.texi	Sun Jun 20 15:11:56 1993
***************
*** 344,348 ****
  @itemx @var{file}.cxx
  @itemx @var{file}.C
! C++ source code which must be preprocessed.
  
  @item @var{file}.s 
--- 344,350 ----
  @itemx @var{file}.cxx
  @itemx @var{file}.C
! C++ source code which must be preprocessed.  Note that in @samp{.cxx},
! the last two letters must both be literally @samp{x}.  Likewise,
! @samp{.C} refers to a literal capital C.
  
  @item @var{file}.s 
diff -rc2P -x TAGS -x gcc.info* -x gcc,info -x *-parse.c gcc-2.4.4/version.c gcc-2.4.5/version.c
*** gcc-2.4.4/version.c	Sat Jun 19 05:25:21 1993
--- gcc-2.4.5/version.c	Sun Jun 20 19:47:08 1993
***************
*** 1 ****
! char *version_string = "2.4.4";
--- 1 ----
! char *version_string = "2.4.5";
