Changes for GCC version 2.5.4 from version 2.5.3.

Changes in files you can reconstruct with Bison, etags, makeinfo, and
TeX have been omitted.  Some of these files are updated just by
building the compiler.  You can update rest of 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.

Before applying these diffs, go to the directory gcc-2.5.3.
Then use the command

    patch -p1

feeding it the following diffs as input.
Then rename the directory to gcc-2.5.4.

diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/ChangeLog gcc-2.5.4/ChangeLog
*** gcc-2.5.3/ChangeLog	Thu Nov 11 10:52:54 1993
--- gcc-2.5.4/ChangeLog	Tue Nov 16 08:40:07 1993
***************
*** 1,2 ****
--- 1,136 ----
+ Tue Nov 16 02:06:01 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* Version 2.5.4 released.
+ 
+ 	* c-typeck.c (push_init_level): When aligning next struct field,
+ 	make sure there's another field left.
+ 
+ 	* cp-errfn.c: Don't include string.h.
+ 	(STRDUP): Macro deleted.
+ 	(cp_thing): Copy strings "by hand".
+ 
+ 	* combine.c (force_to_mode): Don't do right-shift in a narrower mode.
+ 
+ Mon Nov 15 01:54:48 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* sdbout.c (sdbout_symbol): If non-static var has static-style RTL,
+ 	don't output anything for it.
+ 
+ 	* Makefile.in (stmp-fixproto): Don't depend on xsys-protos.h.
+ 	(diff): Don't compare bi-parser.c
+ 
+ 	* news.h (NO_DOT_IN_LABEL, NO_DOLLAR_IN_LABEL): Defined.
+ 
+ 	* c-typeck.c (push_init_level, really_start_incremental_init):
+ 	Skip any nameless bitfields at start of record.
+ 	(process_init_element): Skip any nameless bitfields after the field
+ 	just processed.
+ 
+ Mon Nov 15 02:09:54 1993  Torbjorn Granlund  (tege@blues.cygnus.com)
+ 
+ 	* pa.h (RETURN_IN_MEMORY): Define.
+ 
+ Sun Nov 14 17:25:29 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* expr.c (expand_expr): For TRUTH_AND_EXPR, TRUTH_OR_EXPR
+ 	and TRUTH_XOR_EXPR, if result mode doesn't match operands,
+ 	don't use subtarget.
+ 
+ 	* c-typeck.c (convert_for_assignment): Fix typo (codel => coder).
+ 
+ Sun Nov 14 12:45:37 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+ 
+ 	* function.c (assign_parms): Clear STACK_PARM when we have a 
+ 	pass-by-pointer parm that we load into a pseudo.
+ 
+ 	* flow.c (flow_analysis): Fix bug in previous change.
+ 
+ 	* fold-const.c (twoval_comparison_p): Do nothing for SAVE_EXPR, at
+ 	least for now.
+ 
+ 	* reload.c (push_reload): Allow RELOAD_FOR_INPUT with a secondary
+ 	reload the same class as the input if the modes differ.
+ 
+ 	* expr.c (store_expr): Convert constants to proper mode in two places.
+ 
+ 	* sh.h (HAVE_VPRINTF): Delete from here.
+ 	* xm-sh.h (HAVE_VPRINTF): New macro.
+ 
+ Sun Nov 14 04:28:56 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* config/i860/i860.h (SECONDARY_INPUT_RELOAD_CLASS):
+ 	Moving any kind of integer cst to float reg needs intermediate.
+ 
+ 	* sys-protos.h (getmntent): Delete the arg decls
+ 	because BSD 4.4 and Sunos disagree on them.
+ 
+ Sat Nov 13 23:06:42 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* config/mips/mips.c (function_arg, function_arg_advance):
+ 	In default case, handle complex modes much like BLKmode.
+ 	(function_arg_partial_nregs): Likewise.
+ 
+ Sat Nov 13 22:31:48 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+ 
+ 	* alpha.h (CPP_SPEC): Always define __LANGUAGE_C__ unless assembler.
+ 	Define __cplusplus for C++.
+ 
+ 	* alpha.md (movsf, movdf): Add 'G' to constraint for operand 1
+ 	when operand 0 is a register and support it in alternative 0.
+ 
+ 	* stmt.c (expand_end_bindings): Use emit_move_insn instead of
+ 	gen_move_insn in case nonlocal_goto_handler_slot is not a valid memref.
+ 
+ 	* flow.c (find_basic_blocks): When starting new basic block
+ 	for a CALL_INSN in the presence of nonlocal labels, don't
+ 	get confused with following CLOBBER.
+ 	(flow_analysis): Use same logic as find_basic_block to see when
+ 	the insn after a CALL_INSN starts a new basic block.
+ 
+ 	* expmed.c (store_split_bit_field): Properly load a constant VALUE
+ 	into a WORD_MODE pseudo.
+ 
+ Sat Nov 13 18:27:43 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* config/ns32k/ns32k.md (movsi): Handle moves to fp reg.
+ 	Handle const_double as operand 1.
+ 
+ 	* Makefile.in (diff): Fix typo in name gcc.??s.
+ 
+ Fri Nov 12 08:34:58 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+ 
+ 	* dbxout.c (dbxout_type_field): Skip fields with variable
+ 	position and/or size instead of crashing on them.
+ 
+ Fri Nov 12 22:49:50 1993  Pat Rankin  (rankin@eql.caltech.edu)
+ 
+ 	* bi-arity.c, bi-opcode.c, bi-opname.c (main): Flush stdout and
+ 	and check for errors prior to termination; end with call to exit
+ 	rather than return from main, as with gen*.c.
+ 	* bi-arity.c, bi-lexer.c, bi-opcode.c, bi-opname.c, bi-parser.y:
+ 	Use FATAL_EXIT_CODE rather than hardcoded 1 for fatal exit code.
+ 
+ Fri Nov 12 18:41:51 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
+ 
+ 	* gstdarg.h, gvarargs.h: Test __bsdi__ like __BSD_NET2__.
+ 
+ 	* pa.h (FUNCTION_ARG_BOUNDARY): Fix return value for 64bit
+ 	pass by value structures.
+ 
+ 	* fix-header.c (write_rbrac): Handle v*printf like memmove.
+ 
+ Fri Nov 12 08:53:47 1993  Richard Earnshaw (rwe11@cl.cam.ac.uk)
+ 
+ 	* arm.md (comparison): Don't emit invalid optimization
+ 	for (set (reg) (comparison)) and (set (reg) (neg (comparison)))
+ 	when comparison is LT.
+ 
+ 	* arm.c (pattern_really_clobbers_lr): Setting a subreg of a mem is
+ 	valid and safe.
+ 
+ Fri Nov 12 08:38:22 1993  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)
+ 
+ 	* m68k/hpux7.h: Add directory name to #include of hp320.h.
+ 
  Thu Nov 11 00:00:55 1993  Richard Stallman  (rms@mole.gnu.ai.mit.edu)
  
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/INSTALL gcc-2.5.4/INSTALL
*** gcc-2.5.3/INSTALL	Thu Nov 11 10:42:08 1993
--- gcc-2.5.4/INSTALL	Mon Nov 15 05:40:44 1993
***************
*** 232,240 ****
  
            `make compare' may fail on some versions of OSF/1 unless you
!           add `-save-temps' to `BOOT_CFLAGS'.  This forces a fixed name
!           to be used for the assembler input file instead of a random
!           name in `/tmp'.  The name of the assembler input file is
!           stored in the object file and will cause miscompared if it
!           differs between the `stage1' and `stage2' compilations.
  
            GNU CC now supports both the native (ECOFF) debugging format
--- 232,240 ----
  
            `make compare' may fail on some versions of OSF/1 unless you
!           add `-save-temps' to `CFLAGS'.  This forces a fixed name to
!           be used for the assembler input file instead of a random name
!           in `/tmp'.  The name of the assembler input file is stored in
!           the object file and will cause miscompared if it differs
!           between the `stage1' and `stage2' compilations.
  
            GNU CC now supports both the native (ECOFF) debugging format
***************
*** 647,654 ****
  
       Then compare the latest object files with the stage 2 object
!      files--they ought to be identical, unless they contain time stamps.
!      You can compare the files, disregarding the time stamps if any,
!      like this:
  
            make compare
  
--- 647,659 ----
  
       Then compare the latest object files with the stage 2 object
!      files--they ought to be identical, aside from time stamps (if any).
  
+      On some systems, meaningful comparison of object files is
+      impossible; they always appear "different."  This is currently
+      true on Solaris and probably on all systems that use ELF object
+      file format.  Some other systems where this is so are listed below.
+ 
+      Use this command to compare the files:
+ 
            make compare
  
***************
*** 669,677 ****
       MIPS machines, you will not be able to compare the files.
  
!      The Alpha stores file names in the object files and `make compare'
!      does not know how to ignore them, so normally you cannot compare
!      on the Alpha.  However, if you use the `-save-temps' option when
!      compiling *both* stage 2 and stage 3, this causes the same file
!      names to be used in both stages; then you can do the comparison.
  
   14. Build the Objective C library (if you have built the Objective C
--- 674,683 ----
       MIPS machines, you will not be able to compare the files.
  
!      The Alpha stores file names of internal temporary files in the
!      object files and `make compare' does not know how to ignore them,
!      so normally you cannot compare on the Alpha.  However, if you use
!      the `-save-temps' option when compiling *both* stage 2 and stage
!      3, this causes the same file names to be used in both stages; then
!      you can do the comparison.
  
   14. Build the Objective C library (if you have built the Objective C
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/Makefile.in gcc-2.5.4/Makefile.in
*** gcc-2.5.3/Makefile.in	Sun Nov  7 00:24:00 1993
--- gcc-2.5.4/Makefile.in	Tue Nov 16 05:33:54 1993
***************
*** 1615,1619 ****
  
  # stmp-headers is to make sure fixincludes has already finished.
! stmp-fixproto: fixhdr.ready xsys-protos.h fixproto stmp-headers
  	@echo "Various warnings and error messages from fixproto are normal"
  	CPP="$(GCC_FOR_TARGET) -E"; export CPP; \
--- 1615,1619 ----
  
  # stmp-headers is to make sure fixincludes has already finished.
! stmp-fixproto: fixhdr.ready fixproto stmp-headers
  	@echo "Various warnings and error messages from fixproto are normal"
  	CPP="$(GCC_FOR_TARGET) -E"; export CPP; \
***************
*** 2059,2064 ****
  diff:
  	diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y \
! 	  -x cp-parse.c -x cp-parse.h -x cexp.c \
! 	  -x objc-parse.c -x TAGS -x "gcc.??" -x "gcc.??z" -x gcc.aux \
  	  -x "cpp.??s" -x "cpp.??" -x cpp.aux -x "cpp.info*" -x "gcc.info*" \
  	  gcc-$(oldversion) gcc-$(version) > diffs
--- 2059,2064 ----
  diff:
  	diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y \
! 	  -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c \
! 	  -x objc-parse.c -x TAGS -x "gcc.??" -x "gcc.??s" -x gcc.aux \
  	  -x "cpp.??s" -x "cpp.??" -x cpp.aux -x "cpp.info*" -x "gcc.info*" \
  	  gcc-$(oldversion) gcc-$(version) > diffs
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/NEWS gcc-2.5.4/NEWS
*** gcc-2.5.3/NEWS	Sun Nov  7 00:16:12 1993
--- gcc-2.5.4/NEWS	Sun Nov 14 07:15:07 1993
***************
*** 1,10 ****
! Addendum for version 2.5.3:
  
  The method of "mangling" C++ function names has been changed.  So you
! must to recompile all C++ programs completely when you start using GCC
  2.5.  Also, GCC 2.5 requires libg++ version 2.5.  Earlier libg++
  versions won't work with GCC 2.5.  (This is generally true--GCC
  version M.N requires libg++ version M.N.)
! 
  Noteworthy GCC changes in version 2.5:
  
--- 1,17 ----
! Noteworthy change in GCC version 2.5.4:
  
+ A bug fix in passing of structure arguments for the HP-PA architecture
+ makes code compiled with GCC 2.5.4 incompatible with code compiled
+ with earlier versions (if it passes struct arguments of 33 to 64 bits,
+ interspersed with other types of arguments).
+ 
+ Noteworthy change in gcc version 2.5.3:
+ 
  The method of "mangling" C++ function names has been changed.  So you
! must recompile all C++ programs completely when you start using GCC
  2.5.  Also, GCC 2.5 requires libg++ version 2.5.  Earlier libg++
  versions won't work with GCC 2.5.  (This is generally true--GCC
  version M.N requires libg++ version M.N.)
! 
  Noteworthy GCC changes in version 2.5:
  
***************
*** 12,16 ****
  Currently the only operating system supported is MVS; GCC does not run
  on MVS, so you must produce .s files using GCC as a cross compiler,
! then transfer them to MVS to assemble them.
  
  * The Power PC is now supported.
--- 19,24 ----
  Currently the only operating system supported is MVS; GCC does not run
  on MVS, so you must produce .s files using GCC as a cross compiler,
! then transfer them to MVS to assemble them.  This port is not reliable
! yet.
  
  * The Power PC is now supported.
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/README gcc-2.5.4/README
*** gcc-2.5.3/README	Thu Nov 11 10:42:13 1993
--- gcc-2.5.4/README	Tue Nov 16 05:35:25 1993
***************
*** 1,3 ****
! This directory contains the version 2.5.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.5.4 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 c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/bi-arity.c gcc-2.5.4/bi-arity.c
*** gcc-2.5.3/bi-arity.c	Tue Oct  5 15:46:36 1993
--- gcc-2.5.4/bi-arity.c	Sat Nov 13 03:56:41 1993
***************
*** 55,58 ****
--- 55,62 ----
  	printf ("}},\n");
        }
+ 
+   fflush (stdout);
+   exit (ferror (stdout) != 0 ? FATAL_EXIT_CODE : SUCCESS_EXIT_CODE);
+   /* NOTREACHED */
    return 0;
  }
***************
*** 69,73 ****
      {
        fprintf (stderr, "can't allocate %d bytes (out of virtual memory)\n", nbytes);
!       exit (1);
      }
  
--- 73,77 ----
      {
        fprintf (stderr, "can't allocate %d bytes (out of virtual memory)\n", nbytes);
!       exit (FATAL_EXIT_CODE);
      }
  
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/bi-lexer.c gcc-2.5.4/bi-lexer.c
*** gcc-2.5.3/bi-lexer.c	Wed Oct  6 18:53:39 1993
--- gcc-2.5.4/bi-lexer.c	Sat Nov 13 03:56:44 1993
***************
*** 39,43 ****
      {
        fprintf (stderr, "can't allocate %d bytes (out of virtual memory)\n", nbytes);
!       exit (1);
      }
  
--- 39,43 ----
      {
        fprintf (stderr, "can't allocate %d bytes (out of virtual memory)\n", nbytes);
!       exit (FATAL_EXIT_CODE);
      }
  
***************
*** 61,65 ****
      {
        fprintf (stderr, "can't reallocate %d bytes (out of virtual memory)\n", nbytes);
!       exit (1);
      }
  
--- 61,65 ----
      {
        fprintf (stderr, "can't reallocate %d bytes (out of virtual memory)\n", nbytes);
!       exit (FATAL_EXIT_CODE);
      }
  
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/bi-opcode.c gcc-2.5.4/bi-opcode.c
*** gcc-2.5.3/bi-opcode.c	Wed Oct  6 12:10:02 1993
--- gcc-2.5.4/bi-opcode.c	Sat Nov 13 03:56:47 1993
***************
*** 51,54 ****
--- 51,57 ----
      fprintf (stderr, "(Number of opcodes is %d)\n", i);
  
+   fflush (stdout);
+   exit (ferror (stdout) != 0 ? FATAL_EXIT_CODE : SUCCESS_EXIT_CODE);
+   /* NOTREACHED */
    return 0;
  }
***************
*** 65,69 ****
      {
        fprintf (stderr, "can't allocate %d bytes (out of virtual memory)\n", nbytes);
!       exit (1);
      }
  
--- 68,72 ----
      {
        fprintf (stderr, "can't allocate %d bytes (out of virtual memory)\n", nbytes);
!       exit (FATAL_EXIT_CODE);
      }
  
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/bi-opname.c gcc-2.5.4/bi-opname.c
*** gcc-2.5.3/bi-opname.c	Tue Oct  5 15:46:42 1993
--- gcc-2.5.4/bi-opname.c	Sat Nov 13 03:56:51 1993
***************
*** 34,37 ****
--- 34,41 ----
      for (v = d->variations; v; v = v->next)
        printf("\"%s%s\",\n", d->basename, v->name);
+ 
+   fflush (stdout);
+   exit (ferror (stdout) != 0 ? FATAL_EXIT_CODE : SUCCESS_EXIT_CODE);
+   /* NOTREACHED */
    return 0;
  }
***************
*** 48,52 ****
      {
        fprintf (stderr, "can't allocate %d bytes (out of virtual memory)\n", nbytes);
!       exit (1);
      }
  
--- 52,56 ----
      {
        fprintf (stderr, "can't allocate %d bytes (out of virtual memory)\n", nbytes);
!       exit (FATAL_EXIT_CODE);
      }
  
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/bi-parser.y gcc-2.5.4/bi-parser.y
*** gcc-2.5.3/bi-parser.y	Wed Oct  6 12:10:06 1993
--- gcc-2.5.4/bi-parser.y	Sat Nov 13 03:56:57 1993
***************
*** 165,168 ****
  {
    fprintf (stderr, "syntax error in input\n");
!   exit (1);
  }
--- 165,168 ----
  {
    fprintf (stderr, "syntax error in input\n");
!   exit (FATAL_EXIT_CODE);
  }
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/c-typeck.c gcc-2.5.4/c-typeck.c
*** gcc-2.5.3/c-typeck.c	Thu Nov 11 06:10:14 1993
--- gcc-2.5.4/c-typeck.c	Tue Nov 16 08:38:24 1993
***************
*** 3800,3804 ****
         &&
        (coder == INTEGER_TYPE || coder == REAL_TYPE || coder == ENUMERAL_TYPE
!        || codel == COMPLEX_TYPE))
      return convert_and_check (type, rhs);
    /* Conversion to a union from its member types.  */
--- 3800,3804 ----
         &&
        (coder == INTEGER_TYPE || coder == REAL_TYPE || coder == ENUMERAL_TYPE
!        || coder == COMPLEX_TYPE))
      return convert_and_check (type, rhs);
    /* Conversion to a union from its member types.  */
***************
*** 4967,4970 ****
--- 4967,4974 ----
      {
        constructor_fields = TYPE_FIELDS (constructor_type);
+       /* Skip any nameless bit fields atthe beginning.  */
+       while (constructor_fields != 0 && DECL_BIT_FIELD (constructor_fields)
+ 	     && DECL_NAME (constructor_fields) == 0)
+ 	constructor_fields = TREE_CHAIN (constructor_fields);
        constructor_unfilled_fields = constructor_fields;
        constructor_bit_index = copy_node (integer_zero_node);
***************
*** 5039,5043 ****
    /* Structure elements may require alignment.  Do this now
       if necessary for the subaggregate.  */
!   if (constructor_incremental && TREE_CODE (constructor_type) == RECORD_TYPE)
      {
        /* Advance to offset of this element.  */
--- 5043,5048 ----
    /* Structure elements may require alignment.  Do this now
       if necessary for the subaggregate.  */
!   if (constructor_incremental && TREE_CODE (constructor_type) == RECORD_TYPE
!       && constructor_fields)
      {
        /* Advance to offset of this element.  */
***************
*** 5120,5123 ****
--- 5125,5132 ----
      {
        constructor_fields = TYPE_FIELDS (constructor_type);
+       /* Skip any nameless bit fields atthe beginning.  */
+       while (constructor_fields != 0 && DECL_BIT_FIELD (constructor_fields)
+ 	     && DECL_NAME (constructor_fields) == 0)
+ 	constructor_fields = TREE_CHAIN (constructor_fields);
        constructor_unfilled_fields = constructor_fields;
        constructor_bit_index = copy_node (integer_zero_node);
***************
*** 5896,5899 ****
--- 5905,5912 ----
  
  	  constructor_fields = TREE_CHAIN (constructor_fields);
+ 	  /* Skip any nameless bit fields atthe beginning.  */
+ 	  while (constructor_fields != 0 && DECL_BIT_FIELD (constructor_fields)
+ 		 && DECL_NAME (constructor_fields) == 0)
+ 	    constructor_fields = TREE_CHAIN (constructor_fields);
  	  break;
  	}
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/combine.c gcc-2.5.4/combine.c
*** gcc-2.5.3/combine.c	Wed Nov 10 21:31:30 1993
--- gcc-2.5.4/combine.c	Tue Nov 16 02:07:52 1993
***************
*** 5609,5612 ****
--- 5609,5617 ----
  		  != CODE_FOR_nothing))
  	     ? mode : GET_MODE (x));
+   /* It is not valid to do a right-shift in a narrower mode
+      than the one it came in with.  */
+   if ((code == LSHIFTRT || code == ASHIFTRT)
+       && GET_MODE_BITSIZE (mode) < GET_MODE_BITSIZE (GET_MODE (x)))
+     op_mode = GET_MODE (x);
  
    /* Truncate MASK to fit OP_MODE.  */
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/config/alpha/alpha.h gcc-2.5.4/config/alpha/alpha.h
*** gcc-2.5.3/config/alpha/alpha.h	Wed Oct 20 19:35:11 1993
--- gcc-2.5.4/config/alpha/alpha.h	Sat Nov 13 22:56:00 1993
***************
*** 26,37 ****
  -D_SYSTYPE_BSD -Asystem(unix) -Asystem(xpg4) -Acpu(alpha) -Amachine(alpha)"
  
! /* Write out the correct language type definition for the header files.  */
  #define CPP_SPEC "\
! %{.c:	-D__LANGUAGE_C__  -D__LANGUAGE_C %{!ansi:-DLANGUAGE_C}}  \
! %{.h:	-D__LANGUAGE_C__  -D__LANGUAGE_C %{!ansi:-DLANGUAGE_C}}  \
  %{.S:	-D__LANGUAGE_ASSEMBLY__ -D__LANGUAGE_ASSEMBLY %{!ansi:-DLANGUAGE_ASSEMBLY}} \
! %{.cc:	-D__LANGUAGE_C_PLUS_PLUS__ -D__LANGUAGE_C_PLUS_PLUS} \
! %{.cxx:	-D__LANGUAGE_C_PLUS_PLUS__ -D__LANGUAGE_C_PLUS_PLUS} \
! %{.C:	-D__LANGUAGE_C_PLUS_PLUS__ -D__LANGUAGE_C_PLUS_PLUS} \
  %{.m:	-D__LANGUAGE_OBJECTIVE_C__ -D__LANGUAGE_OBJECTIVE_C}"
  
--- 26,37 ----
  -D_SYSTYPE_BSD -Asystem(unix) -Asystem(xpg4) -Acpu(alpha) -Amachine(alpha)"
  
! /* Write out the correct language type definition for the header files.  
!    Unless we have assembler language, write out the symbols for C.  */
  #define CPP_SPEC "\
! %{!.S:	-D__LANGUAGE_C__ -D__LANGUAGE_C %{!ansi:-DLANGUAGE_C}}  \
  %{.S:	-D__LANGUAGE_ASSEMBLY__ -D__LANGUAGE_ASSEMBLY %{!ansi:-DLANGUAGE_ASSEMBLY}} \
! %{.cc:	-D__LANGUAGE_C_PLUS_PLUS__ -D__LANGUAGE_C_PLUS_PLUS -D__cplusplus} \
! %{.cxx:	-D__LANGUAGE_C_PLUS_PLUS__ -D__LANGUAGE_C_PLUS_PLUS -D__cplusplus} \
! %{.C:	-D__LANGUAGE_C_PLUS_PLUS__ -D__LANGUAGE_C_PLUS_PLUS -D__cplusplus} \
  %{.m:	-D__LANGUAGE_OBJECTIVE_C__ -D__LANGUAGE_OBJECTIVE_C}"
  
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/config/alpha/alpha.md gcc-2.5.4/config/alpha/alpha.md
*** gcc-2.5.3/config/alpha/alpha.md	Wed Nov 10 18:49:15 1993
--- gcc-2.5.4/config/alpha/alpha.md	Sat Nov 13 22:29:05 1993
***************
*** 2471,2479 ****
  (define_insn ""
    [(set (match_operand:SF 0 "nonimmediate_operand" "=r,r,m,f,f,f,m")
! 	(match_operand:SF 1 "input_operand" "r,m,rG,f,G,m,fG"))]
    "register_operand (operands[0], SFmode)
     || reg_or_fp0_operand (operands[1], SFmode)"
    "@
!    bis %1,%1,%0
     ldl %0,%1
     stl %r1,%0
--- 2471,2479 ----
  (define_insn ""
    [(set (match_operand:SF 0 "nonimmediate_operand" "=r,r,m,f,f,f,m")
! 	(match_operand:SF 1 "input_operand" "rG,m,rG,f,G,m,fG"))]
    "register_operand (operands[0], SFmode)
     || reg_or_fp0_operand (operands[1], SFmode)"
    "@
!    bis %r1,%r1,%0
     ldl %0,%1
     stl %r1,%0
***************
*** 2486,2494 ****
  (define_insn ""
    [(set (match_operand:DF 0 "nonimmediate_operand" "=r,r,m,f,f,f,m")
! 	(match_operand:DF 1 "input_operand" "r,m,rG,f,G,m,fG"))]
    "register_operand (operands[0], DFmode)
     || reg_or_fp0_operand (operands[1], DFmode)"
    "@
!    bis %1,%1,%0
     ldq %0,%1
     stq %r1,%0
--- 2486,2494 ----
  (define_insn ""
    [(set (match_operand:DF 0 "nonimmediate_operand" "=r,r,m,f,f,f,m")
! 	(match_operand:DF 1 "input_operand" "rG,m,rG,f,G,m,fG"))]
    "register_operand (operands[0], DFmode)
     || reg_or_fp0_operand (operands[1], DFmode)"
    "@
!    bis %r1,%r1,%0
     ldq %0,%1
     stq %r1,%0
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/config/arm/arm.c gcc-2.5.4/config/arm/arm.c
*** gcc-2.5.3/config/arm/arm.c	Tue Oct 19 17:33:50 1993
--- gcc-2.5.4/config/arm/arm.c	Fri Nov 12 08:51:52 1993
***************
*** 1553,1557 ****
  /* Try to determine whether a pattern really clobbers the link register.
     This information is useful when peepholing, so that lr need not be pushed
!    if we combine a call followed by a return */
  
  static int
--- 1553,1561 ----
  /* Try to determine whether a pattern really clobbers the link register.
     This information is useful when peepholing, so that lr need not be pushed
!    if we combine a call followed by a return.
!    NOTE: This code does not check for side-effect expressions in a SET_SRC:
!    such a check should not be needed because these only update an existing
!    value within a register; the register must still be set elsewhere within
!    the function. */
  
  static int
***************
*** 1571,1574 ****
--- 1575,1580 ----
  	  if (GET_CODE (XEXP (SET_DEST (x), 0)) == REG)
  	    return REGNO (XEXP (SET_DEST (x), 0)) == 14;
+ 	  if (GET_CODE (XEXP (SET_DEST (x), 0)) == MEM)
+ 	    return 0;
  	  abort ();
          default:
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/config/arm/arm.md gcc-2.5.4/config/arm/arm.md
*** gcc-2.5.3/config/arm/arm.md	Wed Nov 10 18:54:05 1993
--- gcc-2.5.4/config/arm/arm.md	Fri Nov 12 10:20:50 1993
***************
*** 4230,4244 ****
    ""
    "*
!   if (GET_CODE (operands[1]) == LT)
!     {
!       if (operands[3] == const0_rtx)
! 	return arm_output_asm_insn (\"mov\\t%0, %2, lsr #31\", operands);
!       if (GET_CODE (operands[3]) == CONST_INT
! 	  && !const_ok_for_arm (INTVAL (operands[3])))
! 	arm_output_asm_insn (\"add\\t%0, %2, #%n3\", operands);
!       else
!         arm_output_asm_insn (\"sub\\t%0, %2, %3\", operands);
!       return arm_output_asm_insn (\"mov\\t%0, %0, lsr #31\", operands);
!     }
    if (GET_CODE (operands[1]) == GE && operands[3] == const0_rtx)
      {
--- 4230,4235 ----
    ""
    "*
!   if (GET_CODE (operands[1]) == LT && operands[3] == const0_rtx)
!     return arm_output_asm_insn (\"mov\\t%0, %2, lsr #31\", operands);
    if (GET_CODE (operands[1]) == GE && operands[3] == const0_rtx)
      {
***************
*** 4648,4658 ****
    ""
    "*
!   if (GET_CODE (operands[3]) == LT)
!     {
!       if (operands[3] == const0_rtx)
! 	return arm_output_asm_insn (\"mov\\t%0, %1, asr #31\", operands);
!       arm_output_asm_insn (\"sub\\t%0, %1, %2\", operands);
!       return arm_output_asm_insn (\"mov\\t%0, %0, asr #31\", operands);
!     }
    if (GET_CODE (operands[3]) == NE)
      {
--- 4639,4644 ----
    ""
    "*
!   if (GET_CODE (operands[3]) == LT && operands[3] == const0_rtx)
!     return arm_output_asm_insn (\"mov\\t%0, %1, asr #31\", operands);
    if (GET_CODE (operands[3]) == NE)
      {
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/config/i860/i860.h gcc-2.5.4/config/i860/i860.h
*** gcc-2.5.3/config/i860/i860.h	Sat Oct  2 04:19:15 1993
--- gcc-2.5.4/config/i860/i860.h	Sun Nov 14 05:04:32 1993
***************
*** 380,384 ****
  
  #define SECONDARY_INPUT_RELOAD_CLASS(CLASS,MODE,IN) \
!   ((CLASS) == FP_REGS && GET_CODE (IN) == CONST_INT ? GENERAL_REGS : NO_REGS)
  
  /* Return the maximum number of consecutive registers
--- 380,384 ----
  
  #define SECONDARY_INPUT_RELOAD_CLASS(CLASS,MODE,IN) \
!   ((CLASS) == FP_REGS && CONSTANT_P (IN) ? GENERAL_REGS : NO_REGS)
  
  /* Return the maximum number of consecutive registers
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/config/m68k/hpux7.h gcc-2.5.4/config/m68k/hpux7.h
*** gcc-2.5.3/config/m68k/hpux7.h	Sat Oct 30 23:19:18 1993
--- gcc-2.5.4/config/m68k/hpux7.h	Fri Nov 12 08:37:05 1993
***************
*** 5,7 ****
  #define NO_BUGS
  
! #include "hp320.h"
--- 5,7 ----
  #define NO_BUGS
  
! #include "m68k/hp320.h"
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/config/m68k/news.h gcc-2.5.4/config/m68k/news.h
*** gcc-2.5.3/config/m68k/news.h	Sat Oct  2 04:20:29 1993
--- gcc-2.5.4/config/m68k/news.h	Tue Nov 16 01:23:55 1993
***************
*** 24,27 ****
--- 24,30 ----
  #endif
  
+ #define NO_DOLLAR_IN_LABEL
+ #define NO_DOT_IN_LABEL
+ 
  #include "m68k/m68k.h"
  
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/config/mips/mips.c gcc-2.5.4/config/mips/mips.c
*** gcc-2.5.3/config/mips/mips.c	Tue Nov  9 23:00:13 1993
--- gcc-2.5.4/config/mips/mips.c	Sat Nov 13 23:12:12 1993
***************
*** 2505,2513 ****
    switch (mode)
      {
!     default:
!       error ("Illegal mode given to function_arg_advance");
        break;
  
!     case VOIDmode:
        break;
  
--- 2505,2517 ----
    switch (mode)
      {
!     case VOIDmode:
        break;
  
!     default:
!       if (GET_MODE_CLASS (mode) != MODE_COMPLEX_INT
! 	  && GET_MODE_CLASS (mode) != MODE_COMPLEX_FLOAT)
! 	abort ();
!       cum->gp_reg_found = 1;
!       cum->arg_words += (GET_MODE_SIZE (mode) + 3) / 4;
        break;
  
***************
*** 2564,2571 ****
    switch (mode)
      {
-     default:
-       error ("Illegal mode given to function_arg");
-       break;
- 
      case SFmode:
        if (cum->gp_reg_found || cum->arg_number >= 2)
--- 2568,2571 ----
***************
*** 2586,2589 ****
--- 2586,2595 ----
        break;
  
+     default:
+       if (GET_MODE_CLASS (mode) != MODE_COMPLEX_INT
+ 	  && GET_MODE_CLASS (mode) != MODE_COMPLEX_FLOAT)
+ 	abort ();
+ 
+       /* Drops through.  */
      case BLKmode:
        if (type != (tree)0 && TYPE_ALIGN (type) > BITS_PER_WORD)
***************
*** 2659,2665 ****
       int named;			/* != 0 for normal args, == 0 for ... args */
  {
!   if (mode == BLKmode && cum->arg_words < MAX_ARGS_IN_REGISTERS)
      {
!       int words = (int_size_in_bytes (type) + 3) / 4;
  
        if (words + cum->arg_words <= MAX_ARGS_IN_REGISTERS)
--- 2665,2678 ----
       int named;			/* != 0 for normal args, == 0 for ... args */
  {
!   if ((mode == BLKmode
!        || GET_MODE_CLASS (mode) != MODE_COMPLEX_INT
!        || GET_MODE_CLASS (mode) != MODE_COMPLEX_FLOAT)
!       && cum->arg_words < MAX_ARGS_IN_REGISTERS)
      {
!       int words;
!       if (mode == BLKmode)
! 	words = (int_size_in_bytes (type) + 3) / 4;
!       else
! 	words = (GET_MODE_SIZE (mode) + 3) / 4;
  
        if (words + cum->arg_words <= MAX_ARGS_IN_REGISTERS)
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/config/ns32k/ns32k.md gcc-2.5.4/config/ns32k/ns32k.md
*** gcc-2.5.3/config/ns32k/ns32k.md	Tue Sep 28 20:10:01 1993
--- gcc-2.5.4/config/ns32k/ns32k.md	Sat Nov 13 19:38:22 1993
***************
*** 315,320 ****
  
  (define_insn "movsi"
!   [(set (match_operand:SI 0 "general_operand" "=g<,g<,*f,g")
! 	(match_operand:SI 1 "general_operand" "g,?xy,g,*f"))]
    ""
    "*
--- 315,320 ----
  
  (define_insn "movsi"
!   [(set (match_operand:SI 0 "general_operand" "=g<,g<,*f,g,x")
! 	(match_operand:SI 1 "general_operand" "g,?xy,g,*f,rmn"))]
    ""
    "*
***************
*** 333,336 ****
--- 333,342 ----
        return \"movf %1,%0\";
      }
+   if (GET_CODE (operands[0]) == REG
+       && REGNO (operands[0]) == FRAME_POINTER_REGNUM)
+     return \"lprd fp,%1\";
+   if (GET_CODE (operands[1]) == CONST_DOUBLE)
+     operands[1]
+       = gen_rtx (CONST_INT, VOIDmode, CONST_DOUBLE_LOW (operands[1]));
    if (GET_CODE (operands[1]) == CONST_INT)
      {
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/config/pa/pa.h gcc-2.5.4/config/pa/pa.h
*** gcc-2.5.3/config/pa/pa.h	Wed Nov  3 16:09:25 1993
--- gcc-2.5.4/config/pa/pa.h	Mon Nov 15 05:25:35 1993
***************
*** 472,475 ****
--- 472,479 ----
  #define FINALIZE_PIC finalize_pic ()
  
+ /* SOM ABI says that objects larger than 64 bits are returned in memory.  */
+ #define RETURN_IN_MEMORY(TYPE)	\
+   (TYPE_MODE (TYPE) == BLKmode || int_size_in_bytes (TYPE) > 8)
+ 
  /* Register in which address to store a structure value
     is passed to a function.  */
***************
*** 831,837 ****
  #define FUNCTION_ARG_BOUNDARY(MODE, TYPE)				\
    (((TYPE) != 0)							\
! 	? ((TYPE_ALIGN(TYPE) <= PARM_BOUNDARY)				\
! 		? PARM_BOUNDARY						\
! 		: TYPE_ALIGN(TYPE))					\
  	: ((GET_MODE_ALIGNMENT(MODE) <= PARM_BOUNDARY)			\
  		? PARM_BOUNDARY						\
--- 835,839 ----
  #define FUNCTION_ARG_BOUNDARY(MODE, TYPE)				\
    (((TYPE) != 0)							\
! 	? (((int_size_in_bytes (TYPE)) + 3) / 4) * BITS_PER_WORD	\
  	: ((GET_MODE_ALIGNMENT(MODE) <= PARM_BOUNDARY)			\
  		? PARM_BOUNDARY						\
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/config/sh/sh.h gcc-2.5.4/config/sh/sh.h
*** gcc-2.5.3/config/sh/sh.h	Sat Oct  2 04:23:23 1993
--- gcc-2.5.4/config/sh/sh.h	Sun Nov 14 12:44:38 1993
***************
*** 932,938 ****
  #define SHIFT_COUNT_TRUNCATED 1
  
- /* We have the vprintf function.  */
- #define HAVE_VPRINTF 1
- 
  /* All integers have the same format so truncation is easy.  */
  #define TRULY_NOOP_TRUNCATION(OUTPREC,INPREC)  1
--- 932,935 ----
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/config/sh/xm-sh.h gcc-2.5.4/config/sh/xm-sh.h
*** gcc-2.5.3/config/sh/xm-sh.h	Mon Jun 28 20:11:35 1993
--- gcc-2.5.4/config/sh/xm-sh.h	Sun Nov 14 12:44:02 1993
***************
*** 32,35 ****
--- 32,38 ----
  #endif
  
+ /* We have the vprintf function.  */
+ #define HAVE_VPRINTF 1
+ 
  /* target machine dependencies.
     tm.h is a symbolic link to the actual target specific file.  */
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/cp-errfn.c gcc-2.5.4/cp-errfn.c
*** gcc-2.5.3/cp-errfn.c	Fri Oct  8 15:05:07 1993
--- gcc-2.5.4/cp-errfn.c	Tue Nov 16 04:03:59 1993
***************
*** 21,25 ****
  #include "config.h"
  #include "tree.h"
- #include <string.h>
  #include <ctype.h>
  
--- 21,24 ----
***************
*** 37,42 ****
  extern int   cp_line_of PROTO((tree));
  
- #define STRDUP(f) strcpy ((char *) alloca (strlen (f)+1), (f))
- 
  #define NARGS 3
  #define arglist a1, a2, a3
--- 36,39 ----
***************
*** 52,60 ****
       arglist_dcl
  {
!   char *fmt = STRDUP(format);
    char *f;
    int arg;
    HOST_WIDE_INT args[NARGS];
!   ARGSINIT
  
    for (f = fmt, arg = 0; *f; ++f)
--- 49,60 ----
       arglist_dcl
  {
!   char *fmt;
    char *f;
    int arg;
    HOST_WIDE_INT args[NARGS];
!   ARGSINIT;
! 
!   fmt = (char *) alloca (strlen (format) + 1);
!   strcpy (fmt, format);
  
    for (f = fmt, arg = 0; *f; ++f)
***************
*** 110,114 ****
        if (function)
  	{
! 	  char *p;
  
  	  if (arg >= NARGS) abort ();
--- 110,114 ----
        if (function)
  	{
! 	  char *p, *p1;
  
  	  if (arg >= NARGS) abort ();
***************
*** 116,120 ****
  	  /* Must use a temporary to avoid calling *function twice */
  	  p = (*function) (args[arg], alternate);
! 	  args[arg] = (HOST_WIDE_INT) STRDUP(p);
  	  *f = 's';
  	}
--- 116,122 ----
  	  /* Must use a temporary to avoid calling *function twice */
  	  p = (*function) (args[arg], alternate);
! 	  p1 = (char *) alloca (strlen (p) + 1);
! 	  strcpy (p1, p);
! 	  args[arg] = (HOST_WIDE_INT) p1;
  	  *f = 's';
  	}
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/dbxout.c gcc-2.5.4/dbxout.c
*** gcc-2.5.3/dbxout.c	Thu Nov 11 08:24:14 1993
--- gcc-2.5.4/dbxout.c	Sat Nov 13 17:07:51 1993
***************
*** 591,594 ****
--- 591,599 ----
        else if (TREE_CODE (tem) == TYPE_DECL)
  	continue;
+       /* Omit fields whose position or size are variable.  */
+       else if (TREE_CODE (tem) == FIELD_DECL
+ 	       && (TREE_CODE (DECL_FIELD_BITPOS (tem)) != INTEGER_CST
+ 		   || TREE_CODE (DECL_SIZE (tem)) != INTEGER_CST))
+ 	continue;
        /* Omit here the nameless fields that are used to skip bits.  */
        else if (DECL_NAME (tem) != 0 && TREE_CODE (tem) != CONST_DECL)
***************
*** 657,663 ****
  		       TREE_INT_CST_LOW (DECL_SIZE (tem)));
  	    }
- 	  else
- 	    /* This has yet to be implemented.  */
- 	    abort ();
  	  CHARS (23);
  	}
--- 662,665 ----
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/expmed.c gcc-2.5.4/expmed.c
*** gcc-2.5.3/expmed.c	Wed Nov 10 16:27:40 1993
--- gcc-2.5.4/expmed.c	Sat Nov 13 22:50:58 1993
***************
*** 683,695 ****
       much at a time.  */
    int unit = MIN (align * BITS_PER_UNIT, BITS_PER_WORD);
-   rtx word;
    int bitsdone = 0;
  
!   if (GET_CODE (value) == CONST_DOUBLE
!       && (word = gen_lowpart_common (word_mode, value)) != 0)
!     value = word;
! 
    if (CONSTANT_P (value) && GET_CODE (value) != CONST_INT)
!     value = copy_to_mode_reg (word_mode, value);
  
    while (bitsdone < bitsize)
--- 683,701 ----
       much at a time.  */
    int unit = MIN (align * BITS_PER_UNIT, BITS_PER_WORD);
    int bitsdone = 0;
  
!   /* If VALUE is a constant other than a CONST_INT, get it into a register in
!      WORD_MODE.  If we can do this using gen_lowpart_common, do so.  Note
!      that VALUE might be a floating-point constant.  */
    if (CONSTANT_P (value) && GET_CODE (value) != CONST_INT)
!     {
!       rtx word = gen_lowpart_common (word_mode, value);
! 
!       if (word)
! 	value = word;
!       else
! 	value = gen_lowpart_common (word_mode,
! 				    force_reg (GET_MODE (value), value));
!     }
  
    while (bitsdone < bitsize)
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/expr.c gcc-2.5.4/expr.c
*** gcc-2.5.3/expr.c	Wed Nov 10 16:31:00 1993
--- gcc-2.5.4/expr.c	Sun Nov 14 19:11:28 1993
***************
*** 2611,2614 ****
--- 2611,2622 ----
      {
        temp = expand_expr (exp, NULL_RTX, VOIDmode, 0);
+ 
+       /* If TEMP is a VOIDmode constant, use convert_modes to make
+ 	 sure that we properly convert it.  */
+       if (CONSTANT_P (temp) && GET_MODE (temp) == VOIDmode)
+ 	temp = convert_modes (GET_MODE (SUBREG_REG (target)),
+ 			      TYPE_MODE (TREE_TYPE (exp)), temp,
+ 			      SUBREG_PROMOTED_UNSIGNED_P (target));
+ 
        convert_move (SUBREG_REG (target), temp,
  		    SUBREG_PROMOTED_UNSIGNED_P (target));
***************
*** 2634,2637 ****
--- 2642,2654 ----
      }
  
+   /* If TEMP is a VOIDmode constant and the mode of the type of EXP is not
+      the same as that of TARGET, adjust the constant.  This is needed, for
+      example, in case it is a CONST_DOUBLE and we want only a word-sized
+      value.  */
+   if (CONSTANT_P (temp) && GET_MODE (temp) == VOIDmode
+       && GET_MODE (target) != TYPE_MODE (TREE_TYPE (exp)))
+     temp = convert_modes (GET_MODE (target), TYPE_MODE (TREE_TYPE (exp)),
+ 			  temp, TREE_UNSIGNED (TREE_TYPE (exp)));
+ 
    /* If value was not generated in the target, store it there.
       Convert the value to TARGET's type first if nec.  */
***************
*** 5148,5152 ****
--- 5165,5173 ----
     but the question is how to recognize those cases.  */
  
+       /* TRUTH_AND_EXPR can have a result whose mode doesn't match
+ 	 th operands.  If so, don't use our target.  */
      case TRUTH_AND_EXPR:
+       if (mode != TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0))))
+ 	subtarget = 0;
      case BIT_AND_EXPR:
        this_optab = and_optab;
***************
*** 5155,5158 ****
--- 5176,5181 ----
  /* See comment above about TRUTH_AND_EXPR; it applies here too.  */
      case TRUTH_OR_EXPR:
+       if (mode != TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0))))
+ 	subtarget = 0;
      case BIT_IOR_EXPR:
        this_optab = ior_optab;
***************
*** 5160,5163 ****
--- 5183,5188 ----
  
      case TRUTH_XOR_EXPR:
+       if (mode != TYPE_MODE (TREE_TYPE (TREE_OPERAND (exp, 0))))
+ 	subtarget = 0;
      case BIT_XOR_EXPR:
        this_optab = xor_optab;
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/fix-header.c gcc-2.5.4/fix-header.c
*** gcc-2.5.3/fix-header.c	Thu Nov 11 10:50:54 1993
--- gcc-2.5.4/fix-header.c	Fri Nov 12 18:00:15 1993
***************
*** 380,384 ****
        /* In the case of memmove, protect in case the application
  	 defines it as a macro before including the header.  */
!       if (!strcmp (fn->fname, "memmove"))
  	macro_protect = 1;
  
--- 380,387 ----
        /* In the case of memmove, protect in case the application
  	 defines it as a macro before including the header.  */
!       if (!strcmp (fn->fname, "memmove")
! 	  || !strcmp (fn->fname, "vprintf")
! 	  || !strcmp (fn->fname, "vfprintf")
! 	  || !strcmp (fn->fname, "vsprintf"))
  	macro_protect = 1;
  
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/flow.c gcc-2.5.4/flow.c
*** gcc-2.5.3/flow.c	Fri Sep 24 15:28:53 1993
--- gcc-2.5.4/flow.c	Sun Nov 14 23:16:11 1993
***************
*** 342,349 ****
  		&& (prev_code == JUMP_INSN
  		    || (prev_code == CALL_INSN
! 			&& nonlocal_label_list != 0)
  		    || prev_code == BARRIER)))
  	  i++;
! 	if (code != NOTE)
  	  prev_code = code;
        }
--- 342,356 ----
  		&& (prev_code == JUMP_INSN
  		    || (prev_code == CALL_INSN
! 			&& nonlocal_label_list != 0
! 			/* Ignore a CLOBBER after a CALL_INSN here.  */
! 			&& ! (code == INSN
! 			      && GET_CODE (PATTERN (insn)) == CLOBBER))
  		    || prev_code == BARRIER)))
  	  i++;
! 	if (code != NOTE
! 	    /* Skip a CLOBBER after a CALL_INSN.  See similar code in
! 	       find_basic_blocks.  */
! 	    && ! (prev_code == CALL_INSN
! 		  && code == INSN && GET_CODE (PATTERN (insn)) == CLOBBER))
  	  prev_code = code;
        }
***************
*** 432,436 ****
  		     && (prev_code == JUMP_INSN
  			 || (prev_code == CALL_INSN
! 			     && nonlocal_label_list != 0)
  			 || prev_code == BARRIER)))
  	  {
--- 439,447 ----
  		     && (prev_code == JUMP_INSN
  			 || (prev_code == CALL_INSN
! 			     && nonlocal_label_list != 0
! 			     /* Ignore if CLOBBER since we consider this
! 				part of the CALL.  See below.  */
! 			     && ! (code == INSN
! 				   && GET_CODE (PATTERN (insn)) == CLOBBER))
  			 || prev_code == BARRIER)))
  	  {
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/fold-const.c gcc-2.5.4/fold-const.c
*** gcc-2.5.3/fold-const.c	Mon Oct 18 22:50:57 1993
--- gcc-2.5.4/fold-const.c	Sun Nov 14 19:24:41 1993
***************
*** 1922,1925 ****
--- 1922,1930 ----
  	       || code == COMPOUND_EXPR))
      class = '2';
+ 
+   /* ??? Disable this since the SAVE_EXPR might already be in use outside
+      the expression.  There may be no way to make this work, but it needs
+      to be looked at again for 2.6.  */
+ #if 0
    else if (class == 'e' && code == SAVE_EXPR && SAVE_EXPR_RTL (arg) == 0)
      {
***************
*** 1932,1935 ****
--- 1937,1941 ----
        *save_p = 1;
      }
+ #endif
  
    switch (class)
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/function.c gcc-2.5.4/function.c
*** gcc-2.5.3/function.c	Thu Nov  4 13:29:06 1993
--- gcc-2.5.4/function.c	Sun Nov 14 23:56:01 1993
***************
*** 3413,3416 ****
--- 3413,3419 ----
  	      emit_move_insn (parmreg, DECL_RTL (parm));
  	      DECL_RTL (parm) = parmreg;
+ 	      /* STACK_PARM is the pointer, not the parm, and PARMREG is
+ 		 now the parm.  */
+ 	      stack_parm = 0;
  	    }
  #ifdef FUNCTION_ARG_CALLEE_COPIES
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/gcc.texi gcc-2.5.4/gcc.texi
*** gcc-2.5.3/gcc.texi	Wed Nov 10 16:20:28 1993
--- gcc-2.5.4/gcc.texi	Mon Nov 15 06:06:02 1993
***************
*** 1330,1333 ****
--- 1330,1339 ----
  
  @item
+ On HP-UX version 8.05, but not on 8.07 or more recent versions,
+ the @code{fixproto} shell script triggers a bug in the system shell.
+ If you encounter this problem, upgrade your operating system or
+ use BASH (the GNU shell) to run @code{fixproto}.
+ 
+ @item
  Some versions of the Pyramid C compiler are reported to be unable to
  compile GNU CC.  You must use an older version of GNU CC for
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/gstdarg.h gcc-2.5.4/gstdarg.h
*** gcc-2.5.3/gstdarg.h	Tue Nov  9 19:40:55 1993
--- gcc-2.5.4/gstdarg.h	Fri Nov 12 20:54:16 1993
***************
*** 137,141 ****
     (Note that the comments in NET 2's ansi.h
     are incorrect for _VA_LIST_--see stdio.h!)  */
! #if !defined (_VA_LIST_) || defined (__BSD_NET2__) || defined (____386BSD____)
  /* The macro _VA_LIST is used in SCO Unix 3.2.  */
  #ifndef _VA_LIST
--- 137,141 ----
     (Note that the comments in NET 2's ansi.h
     are incorrect for _VA_LIST_--see stdio.h!)  */
! #if !defined (_VA_LIST_) || defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__)
  /* The macro _VA_LIST is used in SCO Unix 3.2.  */
  #ifndef _VA_LIST
***************
*** 143,147 ****
  #ifndef _VA_LIST_T_H
  #define _VA_LIST_T_H
! #if !(defined (__BSD_NET2__) || defined (____386BSD____))
  #define _VA_LIST_
  #endif
--- 143,147 ----
  #ifndef _VA_LIST_T_H
  #define _VA_LIST_T_H
! #if !(defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__))
  #define _VA_LIST_
  #endif
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/gvarargs.h gcc-2.5.4/gvarargs.h
*** gcc-2.5.3/gvarargs.h	Tue Oct 26 19:26:37 1993
--- gcc-2.5.4/gvarargs.h	Sat Nov 13 03:33:41 1993
***************
*** 151,155 ****
     Sequent defines _VA_LIST_ in <machine/machtypes.h> to be the type to
     use for va_list (``typedef _VA_LIST_ va_list'') */
! #if !defined (_VA_LIST_) || defined (__BSD_NET2__) || defined (____386BSD____) || defined (__sequent__)
  /* The macro _VA_LIST is used in SCO Unix 3.2.  */
  #ifndef _VA_LIST
--- 151,155 ----
     Sequent defines _VA_LIST_ in <machine/machtypes.h> to be the type to
     use for va_list (``typedef _VA_LIST_ va_list'') */
! #if !defined (_VA_LIST_) || defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__)
  /* The macro _VA_LIST is used in SCO Unix 3.2.  */
  #ifndef _VA_LIST
***************
*** 157,161 ****
  #ifndef _VA_LIST_T_H
  #define _VA_LIST_T_H
! #if !(defined (__BSD_NET2__) || defined (____386BSD____) || defined (__sequent__))
  #define _VA_LIST_
  #endif
--- 157,161 ----
  #ifndef _VA_LIST_T_H
  #define _VA_LIST_T_H
! #if !(defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__))
  #define _VA_LIST_
  #endif
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/install.texi gcc-2.5.4/install.texi
*** gcc-2.5.3/install.texi	Thu Nov 11 10:40:34 1993
--- gcc-2.5.4/install.texi	Sun Nov 14 18:09:47 1993
***************
*** 279,283 ****
  
  @code{make compare} may fail on some versions of OSF/1 unless you add
! @samp{-save-temps} to @code{BOOT_CFLAGS}.  This forces a fixed name to
  be used for the assembler input file instead of a random name in
  @file{/tmp}.  The name of the assembler input file is stored in the
--- 279,283 ----
  
  @code{make compare} may fail on some versions of OSF/1 unless you add
! @samp{-save-temps} to @code{CFLAGS}.  This forces a fixed name to
  be used for the assembler input file instead of a random name in
  @file{/tmp}.  The name of the assembler input file is stored in the
***************
*** 753,760 ****
  
  Then compare the latest object files with the stage 2 object
! files---they ought to be identical, unless they contain time stamps.
! You can compare the files, disregarding the time stamps if any, like
! this:
  
  @smallexample
  make compare
--- 753,765 ----
  
  Then compare the latest object files with the stage 2 object
! files---they ought to be identical, aside from time stamps (if any).
  
+ On some systems, meaningful comparison of object files is impossible;
+ they always appear ``different.''  This is currently true on Solaris and
+ probably on all systems that use ELF object file format.  Some other
+ systems where this is so are listed below.
+ 
+ Use this command to compare the files:
+ 
  @smallexample
  make compare
***************
*** 783,791 ****
  MIPS machines, you will not be able to compare the files.
  
! The Alpha stores file names in the object files and @samp{make compare}
! does not know how to ignore them, so normally you cannot compare on the
! Alpha.  However, if you use the @samp{-save-temps} option when compiling
! @emph{both} stage 2 and stage 3, this causes the same file names to be used
! in both stages; then you can do the comparison.
  
  @item
--- 788,797 ----
  MIPS machines, you will not be able to compare the files.
  
! The Alpha stores file names of internal temporary files in the object
! files and @samp{make compare} does not know how to ignore them, so
! normally you cannot compare on the Alpha.  However, if you use the
! @samp{-save-temps} option when compiling @emph{both} stage 2 and stage
! 3, this causes the same file names to be used in both stages; then you
! can do the comparison.
  
  @item
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/reload.c gcc-2.5.4/reload.c
*** gcc-2.5.3/reload.c	Thu Nov  4 18:57:23 1993
--- gcc-2.5.4/reload.c	Sun Nov 14 19:20:01 1993
***************
*** 1020,1026 ****
  	     the secondary_class is different from class.  If you have such
  	     a case, you can not use secondary reloads, you must work around
! 	     the problem some other way.  */
  
! 	  if (type == RELOAD_FOR_INPUT && secondary_class == class)
  	    abort ();
  
--- 1020,1031 ----
  	     the secondary_class is different from class.  If you have such
  	     a case, you can not use secondary reloads, you must work around
! 	     the problem some other way.
  
! 	     Allow this when secondary_mode is not inmode and assume that
! 	     the generated code handles this case (it does on the Alpha, which
! 	     is the only place this currently happens).  */
! 
! 	  if (type == RELOAD_FOR_INPUT && secondary_class == class
! 	      && secondary_mode == inmode)
  	    abort ();
  
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/sdbout.c gcc-2.5.4/sdbout.c
*** gcc-2.5.3/sdbout.c	Mon Nov  8 17:56:14 1993
--- gcc-2.5.4/sdbout.c	Mon Nov 15 22:14:26 1993
***************
*** 757,760 ****
--- 757,766 ----
  	  value = DECL_RTL (decl);
  	}
+       /* Don't output anything if an auto variable
+ 	 gets RTL that is static.
+ 	 GAS version 2.2 can't handle such output.  */
+       else if (GET_CODE (value) == MEM && CONSTANT_P (XEXP (value, 0))
+ 	       && ! TREE_STATIC (decl))
+ 	return;
  
        /* Emit any structure, union, or enum type that has not been output.
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/stmt.c gcc-2.5.4/stmt.c
*** gcc-2.5.3/stmt.c	Mon Nov  1 07:38:03 1993
--- gcc-2.5.4/stmt.c	Sat Nov 13 22:42:32 1993
***************
*** 3109,3112 ****
--- 3109,3113 ----
        rtx handler_label = gen_label_rtx ();
        rtx save_receiver = gen_reg_rtx (Pmode);
+       rtx insns;
  
        /* Don't let jump_optimize delete the handler.  */
***************
*** 3118,3129 ****
  	{
  	  emit_move_insn (nonlocal_goto_handler_slot, save_receiver);
! 	  emit_insn_before (gen_move_insn (save_receiver,
! 					   nonlocal_goto_handler_slot),
! 			    thisblock->data.block.first_insn);
  	}
!       emit_insn_before (gen_move_insn (nonlocal_goto_handler_slot,
! 				       gen_rtx (LABEL_REF, Pmode,
! 						handler_label)),
! 			thisblock->data.block.first_insn);
  
        /* Jump around the handler; it runs only when specially invoked.  */
--- 3119,3136 ----
  	{
  	  emit_move_insn (nonlocal_goto_handler_slot, save_receiver);
! 
! 	  start_sequence ();
! 	  emit_move_insn (save_receiver, nonlocal_goto_handler_slot);
! 	  insns = get_insns ();
! 	  end_sequence ();
! 	  emit_insns_before (insns, thisblock->data.block.first_insn);
  	}
! 
!       start_sequence ();
!       emit_move_insn (nonlocal_goto_handler_slot,
! 		      gen_rtx (LABEL_REF, Pmode, handler_label));
!       insns = get_insns ();
!       end_sequence ();
!       emit_insns_before (insns, thisblock->data.block.first_insn);
  
        /* Jump around the handler; it runs only when specially invoked.  */
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/sys-protos.h gcc-2.5.4/sys-protos.h
*** gcc-2.5.3/sys-protos.h	Wed Sep  8 14:48:11 1993
--- gcc-2.5.4/sys-protos.h	Sun Nov 14 04:28:52 1993
***************
*** 457,461 ****
  extern int                    getmaxy(WINDOW *);
  extern int                    getmntany(FILE *, struct mnttab *, struct mnttab *);
! extern int                    getmntent(FILE *, struct mnttab *);
  extern long unsigned int      getmouse(void);
  extern int                    getmsg(int, struct strbuf *, struct strbuf *, int *);
--- 457,461 ----
  extern int                    getmaxy(WINDOW *);
  extern int                    getmntany(FILE *, struct mnttab *, struct mnttab *);
! extern int                    getmntent(/* ??? */);
  extern long unsigned int      getmouse(void);
  extern int                    getmsg(int, struct strbuf *, struct strbuf *, int *);
diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x objc-parse.y -x cp-parse.c -x cp-parse.h -x cexp.c -x bi-parser.c -x objc-parse.c -x TAGS -x gcc.?? -x gcc.??s -x gcc.aux -x cpp.??s -x cpp.?? -x cpp.aux -x cpp.info* -x gcc.info* gcc-2.5.3/version.c gcc-2.5.4/version.c
*** gcc-2.5.3/version.c	Thu Nov 11 08:23:02 1993
--- gcc-2.5.4/version.c	Mon Nov 15 05:41:28 1993
***************
*** 1 ****
! char *version_string = "2.5.3";
--- 1 ----
! char *version_string = "2.5.4";

