
Sat Oct 31 15:19:54 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Version 2.3 released.

	* Makefile.in (install-libobjc): New target.
	($(srcdir)/gcc.dvi, $(srcdir)/cpp.dvi): New targets.
	(extraclean): rm *diff, *lose, config/*lose.
	(mostlyclean): rm config/core.

	* objc-actions.c (OBJC_SELECTORS_WITHOUT_LABELS): Define by default.

Fri Oct 30 20:11:52 1992  James Van Artsdalen  (james at bigtex.cactus.org)

	* i386.c (output_move_double): Undo 10/25 change.  Handle case
	where part of a dest reg is used in a src mem rtx, without using
	stack.

Fri Oct 30 18:52:57 1992  Michael Meissner  (meissner@osf.org)

	* mips.h (MIPS_VERSION): Bump meissner version number to 28.

	* mips.md (addsi3, subsi3): Don't allow -32768 as the second
	operand, the assembler complains if the instruction fills a delay
	slot.

Fri Oct 30 16:11:37 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* combine.c (simplify_shift_const):
	For a subreg, require subreg_lowpart_p and not paradoxical.

	* Makefile.in (install-fixincludes): Ignore dirs that don't exist.

Thu Oct 29 20:15:44 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* gvarargs.h, gstdarg.h [4.3 net 2]: If _VA_LIST_, is undefined
	then va_list is already declared.

	* i386gas.h (ASM_GENERATE_INTERNAL_LABEL, ASM_OUTPUT_INTERNAL_LABEL): 
	Override, if NO_UNDERSCORES.

Thu Oct 29 17:30:52 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* flow.c (life_analysis): Mark FP live at end of function.
	* reload1.c (reload): If FP was eliminated, remove it from
	being live in any basic block.

	* varasm.c (output_constant_pool): Labels can be deleted by being
	turned into NOTEs, not just have INSN_DELETED_P.

Thu Oct 29 16:15:47 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* gstdarg.h: Use _ANSI_STDARG_H_, not _ANSI_STDARG_H.

	* gstddef.h [4.3 net 2]: If _SIZE_T_, etc. are undefined
	then type is already declared.

	* m68k.c (print_operand_address) [MOTOROLA !SGS]:
	Don't subtract 2 in the address displacement.

Thu Oct 29 14:36:23 1992  Michael Meissner  (meissner@osf.org)

	* libgcc2.c (__builtin_vec_new): #undef NULL before including
	stdio.h to prevent redeclaration message.
	(pyramid __enable_execute_stack): Ditto.

	* i386rose.h (YES_UNDERSCORES): Define.
	(ASM_OUTPUT_LABELREF): Don't redefine.

	* mips.h (ASM_FINAL_SPEC): If cross compiling, don't invoke
	mips-tfile by default.

	* decrose.h (ASM_FINAL_SPEC): If cross compiling, don't invoke
	mips-tfile by default.

	* mips-tdump.c, mips-tfile.c:  Handle the case where CROSS_COMPILE
	is defined more gracefully.

Thu Oct 29 12:10:16 1992  Tim Moore  (moore at defmacro.cs.utah.edu)

	* combine.c (make_extraction): Fix paren error in if for INNER is reg.

Thu Oct 29 13:49:03 1992  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* xm-mipsbsd.h: Really delete file.

Thu Oct 29 02:48:28 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* dwarfout.c, arm.c, m88k.c: Include "assert.h" instead of <assert.h>.

Thu Oct 29 00:43:00 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* gstddef.h [4.3 net 2]: Force inclusion of ansi.h.
	Undef _SIZE_T_, _PTRDIFF_T_, _WCHAR_T_ at end.

	* Makefile.in (libgcc2.a, libgcc1.a): Use || to exit if cp fails.
	(install-float-h-cross): Use fi, not done.
	Write float.h in $(tmpdir), not in `.'.
	(tmpdir): New variable.

	* i386gas.h (NO_UNDERSCORES): Test was backwards.
	(SDB_DEBUGGING_OUTPUT): Defined.

Wed Oct 28 16:33:34 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* gstdarg.h, gvarargs.h:
	On Net 2 system, don't test, define or undef _VA_LIST_.
	Use _ANSI_H_, __BSD_NET2__ and ____386BSD____ to test for this.

	* i386bsd.h (CPP_PREDEFINES): Add ____386BSD____.

	* c-decl.c (pushdecl): Allow redeclaring builtin as any sort of static.

	* Makefile.in (install-cross-tools): Fix typo.
	(all.build): Dep on xgcc instead of $(GCC_PASSES).

Wed Oct 28 15:25:42 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* m88k.c (print_operand): When AS_BUG_FLDCR is defined, use alternate
	fldcr form.
	* m88kdgux.h (AS_BUG_FLDCR): Define to accomodate 4.30 assembler bug.

	* m88kv3.h (CPP_PREDEFINES): Add -Dunix.

	* m88kdolph.h (SDB_ALLOW_FORWARD_REFERENCES): Don't override.

Wed Oct 28 05:34:11 1992  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* reload1.c (gen_input_reload): In PLUS, if OP0 and OP1 are the
	same, use RELOADREG when generating the addition.

	* reload.c (find_reloads_address): When copying memref after we've
	made recursive calls on it, copy any replacements we made.

	* combine.c (can_combine_p): Don't substitute an expression
	containing a register that will be clobbered in I3.

	* objc/core.c, objc/hash.c: Include tconfig.h, not config.h.
	Include gstdarg.h.
	* objc/object.m: Include tconfig.h, not config.h.
	Include gstdarg.h before stdio.h.
	* objc/objc.h: Don't include gstdarg.h here.
	* objc/objc-proto.h (CLASS_LOCATION_SHIFT): Use HOST_BITS_PER_LONG,
	not BITS_PER_WORD.
	(setClassNumber, getClassNumber): `info' field is long, not int.

Wed Oct 28 10:54:50 1992  Michael Meissner  (meissner@osf.org)

	* libgcc2.c (L_caps_new): Properly close comment.

Wed Oct 28 05:50:10 1992  Torbjorn Granlund  (tege@hal.gnu.ai.mit.edu)

	* pa.md (mulsi): Input predicates back to srcsi_operands.
	Don't handle constants specifically for TARGET_SNAKE, but call
	force_reg to put them in registers.
	(indexed addressing mode patterns): Remove the patterns with
	unscaled index.  Switch off patterns that never match.

	* longlong.h (file header): Add comment describing sdiv_qrnnd.
	(__hppa sub_ddmmss): Swap input operands.

	* gcc.c (process_command): Check that we have enough arguments.

Wed Oct 28 00:40:18 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* configure (i[34]86-*-sysv*): Take note of $stabs.
	* i386gas.h (SDB_DEBUGGING_INFO): #undef deleted.
	(DBX_DEBUGGING_INFO): Definition deleted.
	* i386gstabs.h: New file.

	* Makefile.in (mostlyclean): Don't delete tmp-limits.h.

	* i386vgas.h: File deleted.

Tue Oct 27 15:35:51 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* libgcc2.c: Include stdio.h.
	[__GNU_LIBRARY__] (write): Defined.

	* Makefile.in (install-cross-tools): When handling $(tooldir)/include,
	do all cd's starting from build directory.

	* i386gas.h (NO_UNDERSCORES): Don't define, if YES_UNDERSCORES.
	* i386linux.h (YES_UNDERSCORES): Defined.

Tue Oct 27 14:17:43 1992  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* configure (i[34]86-*-linux): Set broken_install.
	* x-linux (INSTALL): Delete.
	* x-iris (INSTALL): Delete.

Tue Oct 27 13:39:22 1992  Tim Moore  (moore@hal.gnu.ai.mit.edu)

	* pa.h (ASM_GLOBALIZE_LABEL): Give function symbols CODE type,
	others DATA type.

Mon Oct 26 16:40:43 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-typeck.c (build_c_cast): Don't warn about size change between
	pointer and integer if the value is constant.

	* Makefile.in (libobjc.a): If ln fails, copy libobjc.a.

Mon Oct 26 16:21:11 1992  Tim Moore  (moore@defmacro.cs.utah.edu)

	* pa.h (EXPORT_PARMS, ASM_DECLARE_FUNCTION): Blow away usage of
	EXPORT_PARMS.  BUGGY_GAS isn't a problem any more.
	(TEXT_SPACE_P, FUNCTION_NAME_P): New macros.
	(ENCODE_SECTION_INFO): Use TEXT_SPACE_P.
	(STRIP_NAME_ENCODING): Strip a '*' which might preceed a '@'.
	(ASM_OUTPUT_EXTERNAL): Give only function labels a CODE type.
	(ASM_OUTPUT_LABELREF): Use FUNCTION_NAME_P.
	* pa.c (hppa_encode_label): Change function name encoding to
	preserve leading '*' if there is one.
	(function_label_operand): Use FUNCTION_NAME_P macro.

Mon Oct 26 14:39:46 1992  Torbjorn Granlund  (tege@hal.gnu.ai.mit.edu)

	From Tim Moore:
	* function.c (locate_and_pad_parm): In ARGS_GROW_DOWNWARD case,
	don't pad to argument alignment if where_pad is downward.

Mon Oct 26 11:21:36 1992  Chris Smith  (csmith@convex.com)

	* convex.h (SHIFT_COUNT_TRUNCATED): Undefine.

Mon Oct 26 07:48:35 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* alpha.c (print_operand, new 'L'): New case.
	* alpha.md (movhi/movqi patterns): For long constants, use 'i'
	constraint instead of 'K'; use "%L1" in template.

	* configure (alpha): Set use_collect2.

Mon Oct 26 04:19:24 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* xm-alpha.h: Declare calloc.

Sun Oct 25 17:19:52 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* function.c (fixup_var_refs_insns): Don't call delete_insn if not -O.
	Make a NOTE_INSN_DELETED instead.

Sun Oct 25 11:57:04 1992  Chris Smith  (csmith@convex.com)

	* convex.h (target_flags): prevent -mnoc2 from clearing
	TARGET_INDIRECTS.
	(TARGET_INDIRECTS): Always on.

Sun Oct 25 16:56:18 1992  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* calls.c (expand_call): Don't call convert_to_mode if we obtained
	VALUE in the proper mode; VALUE might be a CONST_INT.

Sun Oct 25 03:18:03 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* expr.c (gen_push_operand): No longer static.

	* i386.c (output_move_double): Divert first word via the stack
	if it's a register used in the input operand.
	* i386.md (movdi): Delete the `&' from constraint.

Sat Oct 24 21:41:00 1992  Chris Smith  (csmith@convex.com)

	* convex.md (movstrictsi): Correct output constraint is + not =.

Sat Oct 24 14:10:43 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* news.h (FUNCTION_EPILOGUE): Fix typos.

	* cccp.c (get_lintcmd): Length of `LINTLIBRARY' is 11.

Sat Oct 24 13:22:09 1992  Torbjorn Granlund  (tege@hal.gnu.ai.mit.edu)

	* arm.md (DImode patterns): Add `&' to target operand constraints.

	* Makefile.in (setting version variable): Prepend $(srcdir) to
	version.c.

	From Wilson:
	* longlong.h (sparclite): Use machine independent USItype instead
	of explicit types.

Sat Oct 24 10:35:18 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* rs6000.md (movdi): Tests were in wrong order.

	* rs6000.h (LEGITIMIZE_ADDRESS): Indexed addresses are not valid
	for DImode and TImode; GO_IF_LEGITIMATE_ADDRESS knows this.

	* Makefile.in (mostlyclean): Add missing semicolon.

	* a29k.c (a29k_set_memflags, a29k_set_memflags_1): New functions.
	* a29k.md (movqi, movhi, reload_{in,out}{qi,hi}): Use them.

	* alpha.c (get_aligned_mem): Copy memory flags to new MEM.
	(alpha_set_memflags, alpha_set_memflags_1): New functions.
	* alpha.md (movqi, movhi, reload_{in,out}{qi,hi}): Use new
	functions.

	* alpha.h (ASM_FILE_START): Stop at blank in version string.

Sat Oct 24 04:35:16 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* reload1.c (emit_reload_insns): If not -O, Don't try find_equiv_reg.
	(choose_reload_regs): If not -O, don't inherit reloads.

Fri Oct 23 18:07:10 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* news.h (FUNCTION_EPILOGUE):
	If no frame ptr, increment stack ptr to free up the local space.

	* gcc.c (process_command): Discard after first space in spec_version.

	* print-tree.c (print_node): Always output `>' to match `<'.

	* Makefile.in (version): Use sed to extract.
	Ignore excess after space.
	(install-fixincludes): Fix typo in last change.

	* configure (i386-ibm-aix*): Use aix386ng.h if not --with-gas.
	* aix386ng.h: New file.

Fri Oct 23 15:14:49 1992  Brendan Kehoe  (brendan@lisa.cygnus.com)

	* sdbout.c (sdbout_symbol): Return if a symbol's DECL_NAME is
	empty, since we won't be able to make a symtab of it.

	* convex.h (P_tmpdir): Remove definition.
	* xm-convex.h: Put it here.

Fri Oct 23 10:27:34 1992  Michael Meissner  (meissner@osf.org)

	* i386rose.h (ASM_OUTPUT_LABELREF): Define so that external
	identifiers have leading underscores in front of them.

	* mips-tfile.c (parse_stabs_common): Allow stabs with line numbers
	of 0.  These come from g++ for compiler generated functions that
	take arguments.

Fri Oct 23 07:49:12 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

 	* romp.c (output_fpops): Add SYMBOL_REF and LABEL_REF cases to
	constants handled.

Fri Oct 23 01:58:12 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* flow.c (find_basic_blocks): Check for LABEL_REF_NONLOCAL_P
	in label_value_list.
	* jump.c (mark_jump_label): Copy LABEL_REF_NONLOCAL_P from
	LABEL_REF into REG_LABEL note.

	* toplev.c (push_float_handler): Declare arg old_handler.

	* t-next (OTHER_FIXINCLUDES_DIRS): Defined.

	* Makefile.in (OTHER_FIXINCLUDES_DIRS): New variable, normally empty.
	(install-fixincludes): Run fixincludes on those dirs.
	* fixincludes: Convert //-style comments to /*...*/ style.

	* loop.c (record_biv): Clear total_benefit field of new iv_class.
	(get_condition):
	Verify op 2 of source is label_ref before looking within.

Thu Oct 22 21:17:53 1992  Tim Moore  (moore at defmacro.cs.utah.edu)

	* varasm.c (STRIP_NAME_ENCODING): New macro to decode a symbol name
	munged by ENCODE_SECTION_INFO. 
	(assemble_start_function, assemble_variable): Use STRIP_NAME_ENCODING.
	* pa.h (STRIP_NAME_ENCODING): New definition.

Thu Oct 22 17:53:37 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Makefile.in (mostlyclean): Clean objc subdir only if it exists.

	* news.h (FUNCTION_PROLOGUE): Do allocate local stack space
	when no frame pointer.

Thu Oct 22 15:21:27 1992  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* i960.h (FUNCTION_VALUE): Simplify, just return reg 0.
	* i960.c (i960_function_value): Delete.

Thu Oct 22 09:42:50 1992  Michael Meissner  (meissner@osf.org)

	* mips-tfile.c (parse_stabs_common): Ignore stab line numbers
	of 0, since the G++ front end generates them.  Check whether
	line numbers can fit within the index field, and if not report
	an error.

	* mips.c (function_arg): Align passed structures to double word
	boundary if structure has double word alignment.

	* mips.h (STACK_DYNAMIC_OFFSET): Do not define this macro in order
	to work around a bug.

Thu Oct 22 08:00:43 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* gstdarg.h, gvarargs.h: Treat _AIX and _M_UNIX like __svr4__.

	* i386gas.h (NO_UNDERSCORES): Defined.

	* next.h (INCLUDE_DEFAULTS): Put in GPLUSPLUS_INCLUDE_DIR,
	GCC_INCLUDE_DIR, LOCAL_INCLUDE_DIR, STANDARD_INCLUDE_DIR.
	Don't define at all if cross-compiling.

	* tree.c (copy_node): Copy the excess bytes--don't clear them.

Thu Oct 22 06:40:55 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* a29k.h (TARGET_SWITCHES): Add missing complementary switches:
	-mno-stack-check and -mstorem-bug.

	* a29k.md (long constant split): Use gen_lowpart instead of making
	a SUBREG directly.

	* arm.h (STORE_FLAG_VALUE): Remove bogus definition.

Thu Oct 22 03:04:28 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* m88k.c (prologue_marked): New variable.
	(m88k_end_prologue): Output the epilogue mark here if the start of
	the epilogue passed the end of the prologue.
	(m88k_begin_epilogue): Don't output the epilogue mark if the end
	of the prologue hasn't been processed yet.

Thu Oct 22 03:20:40 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* function.c (put_var_into_stack): When we operate on a pseudo
	that holds the address, use proper modes.

	* combine.c (make_extraction): Use is_mode, not inner_mode,
	for BYTES_BIG_ENDIAN adjustment to offset for non-bitfield case.
	Update is_mode when stripping subreg from around a mem.

	* m68k.h (GO_IF_INDEXABLE_BASE): Allow LABEL_REF only if jump table.

Wed Oct 21 18:55:24 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* gstdarg.h: Check and define _ANSI_STDARG_H along with _STDARG_H.

Wed Oct 21 11:41:39 1992  Tom Wood  (wood at gen-rtx)

	* toplev.c (push_float_handler, pop_float_handler): New functions.
	* fold-const.c (real_value_truncate):
	Use them, in case another handler is already in effect.

Wed Oct 21 22:08:31 1992  H.J. Lu  (hlu@yardbird.eecs.wsu.edu)

	* Makefile (all.build): Add target $(GCC_PASSES) for xgcc. 
	* build-make (CC): Defined.
	(CROSS_GCC_FLAGS): Deleted.
	(HOST_CC): Delete -V option; CC supplies that.

Wed Oct 21 12:34:39 1992  Torbjorn Granlund  (tege@hal.gnu.ai.mit.edu)

	From Wilson:
	* longlong.h (sparclite udiv_qrnnd): Remove comma before
	__AND_CLOBBER_CC.

Wed Oct 21 12:24:24 1992  Michael Meissner  (meissner@osf.org)

	* decrose.h (WORD_SWITCH_TAKES_ARG): Add -pic-names.
	(CC1_SPEC): If -pic-names, pass -mhalf-pic to cc1.

	* i386rose.h (WORD_SWITCH_TAKES_ARG): Add -pic-names.
	(CC1_SPEC): If -pic-names, pass -mhalf-pic to cc1.

Wed Oct 21 07:34:16 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* configure (alpha): Only accept OSF/1.

	* alpha.h (ASM_FILE_START): Change .verstamp ident for BL9.
	* alpha.md (div/mod): Change calling sequence to agree with BL9.

	* expr.c (do_store_flag): Ensure we don't get confused when
	emit_store_flag fails and an operand has a QUEUED.

Wed Oct 21 02:53:58 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* cexp.y (integer_overflow): Do nothing unless pedantic.

Tue Oct 20 17:02:15 1992  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* README, sparc.h, flow.c, regs.h: Change global-alloc.c to global.c.

	* i960.md (call, call_value): Use 'd' not 'r' constraint for scratch.

	* gcc.c (WORD_SWITCH_TAKES_ARG): Handle -Ttext and -Tbss in
	addition to -Tdata.
	* i960.h (WORD_SWITCH_TAKES_ARG): Delete, now unnecessary.
	* next.h (WORD_SWITCH_TAKES_ARG): Add -Tbss.
	* sparc.h, sun2.h, sun3.h (WORD_SWITCH_TAKES_ARG): Add -Ttext and
	-Tbss.

Tue Oct 20 16:49:57 1992  Ron Guilmette (rfg at netcom.com)

	* dwarfout.c (dwarfout_file_scope_decl): Generate DIEs for
	built-in non-fundamental types.

Tue Oct 20 14:58:18 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* objc-actions.c (handle_impent, handle_class_ref): Use __
	to start the generated names, not period.

Tue Oct 20 14:38:30 1992  Brendan Kehoe  (brendan@mole.gnu.ai.mit.edu)

	* cp-method.c (fndecl_as_string): Undo change of Sep 14th for
	emitting a space after the return type of a fn.

	Wed Oct  7 16:01:55 1992  Chip Salzenberg  (chip@tct.com)

	* cp-lex.c (readescape): No warning if digits in \x are all 0's.

Tue Oct 20 06:50:28 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (force_operand): Clarify comment to say what it can return.
	* integrate.c (copy_rtx_and_substitute): Don't assume force_operand
	on an address returns a REG; it might be a SUBREG.  Use force_reg.

Tue Oct 20 04:54:01 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* tree.c (make_node, copy_node):
	Don't assume node length is multiple of int.

Mon Oct 19 18:14:56 1992  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* genrecog.c (write_tree): For type SPLIT, check subroutine return
	values for non-zero value not positive value.

Mon Oct 19 16:11:04 1992  Michael Meissner  (meissner@osf.org)

	* c-typeck.c (print_table, scan_table): Add support for XPG4's %S
	and %C formats for printing/reading wide characters.  %lc and %ls too.

Mon Oct 19 17:58:18 1992  Torbjorn Granlund  (tege@hal.gnu.ai.mit.edu)

	* arm.c (output_epilogue): Restore sp's value if no frame pointer.

	From Wilson:
	* pa.h (WORD_SWITCH_TAKES_ARG): Delete sparc related cruft.

Mon Oct 19 14:49:03 1992  Brendan Kehoe  (brendan@rtl.cygnus.com)

	* cp-parse.y (primary): Don't try building a CALL_EXPR or
	converting types if $$ is an error_mark.

Mon Oct 19 14:01:02 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* m88k.h (SECONDARY_INPUT_RELOAD_CLASS): Require a temporary for a
	pic address with a large constant term.
	* m88k.md (reload_insi): New pattern.
	(addsi3 pattern for large constants): Delete.  Causes reload trouble.
	* m88k.c (emit_move_sequence): Add scratch register.  All callers
	changed.
	(legitimize_address): Add scratch register.  All callers changed
	to pass zero instead of gen_reg_rtx result.  Allocate another temp
	register for -fPIC case.  Use scratch register for pic cases with
	a large constant term.

	* m88k.h (FUNCTION_PROFILER_LENGTH, FUNCTION_BLOCK_PROFILER_LENGTH,
	BLOCK_PROFILER_LENGTH, REG_PUSH_LENGTH, REG_POP_LENGTH): Added.
	(ADJUST_INSN_LENGTH): Account for profiling code.

Mon Oct 19 16:46:52 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Makefile.in (libobjc.a): Don't mkdir objc if dir exists.

	* expr.c (store_field): If trying to sign-extend a constant,
	use value_mode as the mode.

Mon Oct 19 10:59:20 1992  Michael Meissner  (meissner@osf.org)

	* xm-umips.h (index): Define to be strchr.
	(rindex): Define to be strrchr.

	* mips-tdump.c (index, rindex): Undefine these, since the MIPS
	include files have a field spelled index.

Mon Oct 19 03:34:04 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Makefile.in (mostlyclean): Delete libobjc.a.
	(libobjc.a): Create the objc subdir.

Sun Oct 18 17:52:05 1992  Arne H. Juul	(arnej@lise.unit.no)

	* objc/Makefile: Add .SUFFIXES .m and .m.o rule to keep non-GNU
	make happy.

	* Makefile.in (libobjc.a): Remove libobjc.a in current directory
	before attempting to hardlink it or make will fail in later stages.
	(sublibobcj.a): Don't use $(MAKEFLAGS) for objc subdir stuff.

Sun Oct 18 06:00:27 1992  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* cse.c (canon_reg): Don't call validate_change if INSN is zero.

Sun Oct 18 01:09:02 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* i860.h (PRINT_OPERAND): For `h', always use OPERAND_HIGH_ADJ_PART
	even for integer constant addresses.

	* final.c (output_addr_const): Always use FILE, not asm_out_file.

	* cccp.c (collect_expansion): Don't add whitespace at end
	if inside a string and not traditional.
	(rescan): At end of string, if inside macro, always keep scanning.

	* expr.c (store_field): If signed bitfield and want value, sign extend.

Sat Oct 17 21:11:09 1992  H.J. Lu  (hlu@yardbird.eecs.wsu.edu)

	* Makefile.in (all.build): New rule for making gcc with a
	cross-compiler.
	(install.build): New target.
	(line 271): Add `####build overrides'.
	(gen*.o): Depend on hconfig.h, not config.h.
	($(HOST_PREFIX_1)rtl.o, $(HOST_PREFIX_1)print-rtl.o,
	 $(HOST_PREFIX_1)rtlanal.o, $(HOST_PREFIX_1)obstack.o,
	 $(HOST_PREFIX_1)malloc.o): Add final `h' to the regexp to replace.

	* configure: If $host == $taget, but $host != $build, merge
	`build-make' and emit `build = $build'.
	* build-make: New file for making gcc with a cross-compiler.

Sat Oct 17 19:24:31 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-typeck.c (process_init_constructor): When initializing a union,
	handle the case of an empty init list.

	* reload.c (find_reloads_address): Redo last change: copy the mem
	in the same way it's usually done.

	* Makefile.in (gcc.xtar): Fix typo in last change.
	(mostlyclean): Don't use $(MAKEFLAGS) for objc subdir stuff.

Sat Oct 17 19:15:16 1992  John Wroclawski  (jtw@pmws.lcs.mit.edu)

	* decstatn.h (SIZE_TYPE): Fix typo.

Sat Oct 17 17:46:08 1992  Brendan Kehoe  (brendan@mole.gnu.ai.mit.edu)

	* cp-method.c: Don't try to include string.h or strings.h.
	* cp-decl.c: Ditto.

Sat Oct 17 13:50:49 1992  Fred Fish  (fnf@fishpond.cygnus.com)

	* fixinc.svr4 (string.h):
	Remove #defines for other compiler's builtin functions.

Sat Oct 17 00:39:30 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* protoize.c: Add #undef getopt after getopt.h.

	* gstdarg.h, gvarargs.h (va_list) [__SVR4_2__]:
	Don't set or test _VA_LIST.

	* gstddef.h: Do nothing if _ANSI_STDDEF_H already defined.

Fri Oct 16 11:39:06 1992  H.J. Lu  (hlu@yardbird.eecs.wsu.edu)

	* emit-rtl.c (gen_lowpart_common): Fix typo in last change.

Fri Oct 16 22:35:15 1992  Eric Youngdale (youngdale@v6550d.nrl.navy.mil)

	* make-cc1.com: Correct previous patch.

Fri Oct 16 20:07:12 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* objc-actions.c (start_class):
	For an INTERFACE_TYPE, push to permanent obstack.
	(build_message_expr): Use TYPE_MAIN_VARIANT when comparing types.

	* Makefile.in (libobjc.a): Don't use $(MAKEFLAGS).
	Add braces around shell variable references.
	(collect2): Delete file before linking it.
	* objc/Makefile (all): Don't use $(MAKEFLAGS).
	(VPATH): Get rid of ../ since srcdir now absolute.

Fri Oct 16 14:23:25 1992  Michael Meissner  (meissner@osf.org)

	* decstatn.h (all defines): Protect all defines with an #ifndef,
	to allow dec-osf1.h to selectively override macros.

Fri Oct 16 10:44:47 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* Makefile.in (libobjc.a):  Compute srcdir1 without changing
	directories.  Use srcdir1 to locate objc/Makefile.  Put quotes
	around all potential multi-word values.  Recompute GCC_FOR_TARGET.
	(sublibobjc.a): Use same text as libobjc.a.
	(mostlyclean): Use $(MAKE) and srcdir1 for objc action.
	* objc/Makefile (SUBDIR_INCLUDES): Don't use ../$(srcdir).
	(all): Use $(MAKE).

Fri Oct 16 04:16:36 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* function.c (find_fixup_replacement): Renamed from find_replacement.

	* varasm.c (output_addressed_constants): Handle NON_LVALUE_EXPR.

Fri Oct 16 02:25:17 1992  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.md (call define_expands): If TARGET_LONG_CALLS, then force
	the address of the function into a register.
	* pa.h (TARGET_SWITCHES): New switch "-mlong-calls".
	* pa.c (call_operand_address): Only allow registers if
	TARGET_LONG_CALLS.

Fri Oct 16 00:21:57 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Makefile.in (libobjc.a): Get directories right, using shell vars
	thisdir1, srcdir1.  Put quotes around $(GCC_CFLAGS).  Use $(MAKE).

Thu Oct 15 17:07:18 1992  Mike Stump  (mrs@hal.gnu.ai.mit.edu)

	* configure, config.sub, config/elxsi.{c,h,md}, config/xm-elxsi.h,
	config/x-elxsi: Add support for new 64 bit CPU, called Elxsi.

Thu Oct 15 16:55:22 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* alpha.c (alpha_builtin_saveregs): Fix bug in last change.

	* fold-const.c (distribute_bit_expr): Test for BIT_{AND,IOR}_EXPR.

	* cse.c (cse_insn): Add missing call to apply_change_group.

Thu Oct 15 15:09:45 1992  Michael Meissner  (meissner@osf.org)

	* t-mips (CCLIBFLAGS, LIBGCC2_CFLAGS): Delete, so that libgcc.a is
	built with the -G 8 option, instead of -G 0, so that the linker
	doesn't complain when linking in libg++.a.
	* t-decstatn (CCLIBFLAGS, LIBGCC2_CFLAGS): Ditto.

Thu Oct 15 14:30:25 1992  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* mips-tfile.c (parse_def): Allow spaces in arguments for C++.
	Correct test for null when searching for end of name.

Thu Oct 15 11:55:51 1992  Tim Moore  (moore@defmacro.cs.utah.edu)

	* pa.c (compute_frame_size): Take an fregs_live parameter instead
	of setting the static variable save_fregs.
	(output_function_prologue): Initialize save_fregs to 0 and pass to
	compute_frame_size.
	* pa.h (INITIAL_FRAME_POINTER_OFFSET): Pass extra null parameter
	to compute_frame_size.

Thu Oct 15 08:40:07 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* alpha.h (TARGET_FPREGS): New flag.
	(TARGET_SWITCHES): Remove temporary -mfp and add -msoft-float and
	-mfp-regs.
	(TARGET_DEFAULT): Set to -mfp-regs -mno-soft-float.
	(CONDITIONAL_REGISTER_USAGE): Use TARGET_FPREGS.
	(FUNCTION_VALUE, FUNCTION_ARG, LIBCALL_VALUE): Use integer registers
	for FP items if -mno-fp-regs.
	* alpha.c (alpha_builtin_saveregs): Store integer regs twice instead
	of storing the FP regs if -mno-fp-regs.

	* fold-const.c (fold): Add missing test in case when we
	distribute a NOP_EXPR into a COND_EXPR and try to pull it back
	out again.

Thu Oct 15 08:11:00 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* fold-const.c (simple_operand_p): Don't regard global or static
	variables as simple.
	(fold_truthop): Only require the RHS to be simple.

	* m88k.h (CPP_SPEC): Add -D__m88110__ when -m88110 is in effect,
	similarly for -m88100.
	* m88kdgux.h (CPP_SPEC): Ditto.
	* m88kluna.h (CPP_PREDEFINES): Drop -Dmc88100.
	(CPP_SPEC): Reproduce the predefine -Dmc88100 when -m88100 is in
	effect.  Otherwise, supply -D__mc881x0__ when -m881x0 is in effect.

Thu Oct 15 02:09:49 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* expr.c (get_inner_reference):
	If flag_volatile, treat every INDIRECT_REF as volatile.

	* collect2.c (main): If COLLECT_GCC is a relative name, use it anyway.

	* x-next: New file.
	* configure (m68k-next-*): Use that.

	* Changes from NeXT:

	* libgcc2.c [L_ctors] (__CTOR_LIST__, __DTOR_LIST__):
	Initialize these default definitions if __NeXT__.

	* gvarargs.h [__NeXT__]: Define _VA_LIST_ if _ANSI_STDARG_H_ was
	defined; then define _ANSI_STDARG_H_.

	* gstddef.h (_ANSI_STDDEF_H): Define, along with _STDDEF_H.

	* next.h (INCLUDE_DEFAULTS): New macro.

	* cp-method.c (index, rindex): Delete declarations.
	(build_overload_value): Cast result of index.

	* cccp.c (cplusplus_comments): New var.
	(main): Set it according to options.
	(rescan, handle_directive, skip_if_group, validate_else):
	(skip_to_end_of_comment, macarg1, discard_comments): 
	Use cplusplus_comments to enable C++ comment syntax.

Wed Oct 14 11:34:58 1992  Chip Salzenberg  (chip@tct.com)

	* libgcc2.c (__gcc_bcmp): Don't depend on signedness of `char'.

Wed Oct 14 18:52:28 1992  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* sched.c (sched_note_set): Set subreg_p for anything except a
	paradoxical subreg.

	* configure (sparc-*-solaris2): Use xm-spc-sol2.h not xm-spcv4.h.

	* reload.c (find_reloads): Don't let an operand have a numbered
	constraint that makes it match itself.

Wed Oct 14 10:38:31 1992  Tim Moore  (moore@defmacro.cs.utah.edu)

	* pa.md (sCC patterns): Comparison operator should have SImode,
	not CCmode.
	(indexed addressing mode patterns): New patterns to use indexed
	addressing if possible.
	* pa.c 	(output_and): Do handle (const_int 0) as an operand; it
	seems to occur in unoptimized compilation.
	* pa.h 	(REGNO_OK_FOR_FP_P): Logic bug.
	* va-pa.h : When __GNUC__ == 1, don't include the gcc 1 varargs
	file (va-hp9k8.h).  Instead, the definitions are explicitly defined
	here.  This avoids multiple typedefs of va_list.
	* xm-pa.h (HAVE_VPRINTF) Define in HPUX 8.0.

	* pa.md	(mulsi): Use the hardware multiply instruction, xmpyu, if
	TARGET_SNAKE. 
	(umulsidi3): New pattern.
	(reload_insi, reload_outsi, reload_indi, reload_outdi): New
	patterns.  These are needed because SImode and DImode pseudoregs
	may be allocated (or reloaded) in floating point registers for
	multiplication. That means that their addresses, which were
	legitimate for SImode and DImode, aren't valid any more.
	(movsi, movhi, movqi, movdf, movdi, movsf): Pass null scratch
	operand to emit_move_sequence. 
	(fp SImode load and store patterns): Move before main movsi
	pattern. 
	(fp DImode load and store patterns) New patterns.
	(movhi, movqi patterns): Support moves to/from fp registers.
	(movdf pattern): Ensure at least one operand is a register.
	* pa.c 	(emit_move_sequence): Take reload scratch register
	argument, deal with reloads of SImode and DImode mems into
	floating point registers, handle function_label_operand moves.
	(secondary_reload_class): A scratch register is needed if
	reloading a function_label_operand address (probably doesn't
	happen) or an SImode or DImode value into/out of a floating
	point register.
	* pa.h 	(reg_class, REG_CLASS_NAMES, REG_CLASS_CONTENTS,
	REG_CLASS_FROM_LETTER): Define a new register class
	FP_OR_SNAKE_FP_REGS, used only be reload_{in,out}{si,di}. 
	(HARD_REGNO_MODE_OK): Allow all integer modes in Snake floating
	point registers.  QImode and HImode pseudoregs may end up there
	when using xmpyu.

	* pa.md	(pic symbolic address pattern): New pattern.
	(movsi, movdi patterns): Remove some * constraints from fp registers.
	(pic label address pattern): Fix typo.
	(function_label_operand patterns): New patterns for loading a
	label address in HPUX 8.0.
	* pa.c (finalize_pic): No real initialization is necessary for pic.
	(output_function_prologue): Save r19, the pic offset table
	register.  If profiling, save and restore the structure value
	return register (r28) around the call to mcount.
	(hppa_encode_label, function_label_operand): New functions.
	Record if a label is a code label so it can be treated specially
	in HPUX 8.0.
	* pa.h (TARGET_SHARED_LIBS): New flag.  Generate code that can be
	linked with HPUX 8.0 shared libraries.
	(TARGET_SWITCHES): New flags: -mshared-libs and -mno-shared-libs.
	(PIC_OFFSET_TABLE_REGNUM): This is really r19.  The preliminary
	docs from HP were wrong.	
	(ASM_DECLARE_FUNCTION_NAME): Specify "ENTRY" param in .EXPORT
	directive.
	(ENCODE_SECTION_INFO): Encode function labels.
	(ASM_OUTPUT_LABELREF): Deal with function labels.
	(ASM_OUTPUT_REG_PUSH, ASM_OUTPUT_REG_POP): Don't do anything for
	now; their only use (saving stuff during profiling) interacts in a
	wierd way with required assembler directives at the start of a
	function.  Instead, do the save and restore in the function
	prologue.
	(hppa_encode_label): Declare.
	* pa-hpux.h, pa-ghpux.h (TARGET_DEFAULT): Link against shared
	libraries.
	(LINK_SPEC): Don't link against shared libraries if debugging or
	profiling. 
	* pa1-hpux.h, pa1-ghpux,h (TARGET_DEFAULT): Link against shared
	libraries. 

Wed Oct 14 10:17:49 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Makefile.in (gcc.xtar): Copy the objc subdir.
	(mostlyclean): Run the mostlyclean target in the objc subdir.
	(objc-runtime, libobjc.a, sublibobjc.a): New targets.
	(objc, objective-c): Dep on objc-runtime.

	* objc/*: New files.

Wed Oct 14 07:17:19 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* alpha.md (smax, smin): Fix typo in output strings.

	* a29k.c (const_16_operand, const_24_operand): Fix typo in declaration
	of MODE.
	(gpc_reg_or_immediate_operand, and_operand, add_operand): Likwise.

Wed Oct 14 00:12:16 1992  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.h (RTX_COST): Fix spacing typo.

Tue Oct 13 21:51:05 1992  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* a29k.md (call, call_value): Don't use call_operand, since
	checking for recursive calls at this point is not safe.

Tue Oct 13 18:52:17 1992  Brendan Kehoe  (brendan@rtl.cygnus.com)

	* cp-type2.c (my_friendly_abort): Tell them to write to bug-g++.

Tue Oct 13 18:16:12 1992  Chris Smith  (csmith@convex.com)

	* convex.h (P_tmpdir): define to use /tmp.
	(RETURN_POPS_ARGS): correct definition to return size.
	(ASM_IDENTIFY_GCC): output something between gcc2_compiled and
	first function to keep gcc2_compiled out of assembler stabs.

	* convex.md (adddi3, ordi3, xordi3): check sign of CONST_INT
	operands before using as immediates; these insns are word only.
	(ashrdi3): don't use negative shift counts.

	* convex*.h (CPP_SPEC): define __NO_INLINE_STDLIB

	* xm-convex.h: remove temporary workaround from OS 8.0.

Tue Oct 13 14:10:15 1992  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* cp-lex.c (check_newline): Verify that main_input_filename is
	valid before using it.

Tue Oct 13 19:08:54 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* a29k.c: Now includes reload.h.
	(spec_reg_operand): Validate mode and know that some regs support
	MODE_PARTIAL_INT and some MODE_INT.
	(call_operand, reload_memory_operand, a29k_get_reloaded_address)
	 New functions.
	(in_operand): Allow constants with MODE_PARTIAL_INT.
	(out_operand): Allow special registers with any mode.
	Any MEM a word or wider is valid.
	(extend_operator): Deleted.
	(secondary_reload_class): A pseudo is the same as memory; we need
	BP_REGS for multi-word memory or for bytes and halfword if -mndw.
	(print_operand): Delete %X; add %m.
	(print_operand, case 'F'): Check for SYMBOL_REF.
	* a29k.h (PROMOTE_MODE, ADJUST_COST): New macros.
	(CALL_USED_REGISTERS): LR0 is call-used.
	(HARD_REGNO_MODE_OK): Handle MODE_PARTIAL_INT and the special
	registers that can only hold those modes.
	(MODES_TIEABLE_P): Clean up and handle MODE_PARTIAL_INT modes.
	(enum reg_class, REG_CLASS_NAMES, REG_CLASS_CONTENTS): Add new
	classes LR0_REGS, FC_REGS, and CR_REGS.
	(REGNO_REG_CLASS, REG_CLASS_FROM_LETTER): Likewise.
	(PREDICATE_CODES): Update for new and deleted predicates.
	* a29k.md: Use GEN_INT when appropriate.
	(define_attr type): New types for SQRT.
	(call patterns): Use SCRATCH for LR0.
	Use new predicate call_operand so that some integers can be
	used as addresses; fix CALLI so it doesn't accept constant.
	(EXBYTE, EXTHW, INBYTE, INHW): Use ZERO_EXTEND instead of AND
	when combine will make it.
	Use PSImode for BP value and don't reference BP explicitly.
	Clean up define_expands for these operations.
	(rotlsi3): Use PSImode pseudo for FC.
	(sign_extend): Sign extension insns clobber BP.
	({load,store}_multiple): Use PSImode pseudo for CR.
	(MTSR): Add pattern for TRUNCATE from SImode to PSImode.
	(sqrtsf2, sqrtdf2, movpsi): New patterns.
	(load/store bytes/halfword): Clean up to accept temporaries as
	input and use PSImode when required.
	(movhi, movqi): Allocate temporaries here.
	(reload_inqi, reload_outqi, reload_inhi, reload_outhi): New
	patterns.
	(movdf, movdi, movti): Use SCRATCH for BP register.
	(reload_{in,out}{df,di,ti}): New patterns.

Tue Oct 13 16:52:33 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* fixinc.svr4 (sys/stream.h, sys/strsubr.h): Delete spurious `extern'
	in various structure definitions.

	* rtlanal.c (single_set): Fix typo in REG_UNUSED check.

	* cse.c (simplify_binary_operation): Insure that folded >> extends
	the sign even if the host bootstrap compiler doesn't.

	* final.c (output_asm_insn): Advance over the = when processing %=.

	* fixincludes (stdio.h): Fix va_list when preceeded by a *.

Tue Oct 13 14:52:57 1992  Brendan Kehoe  (brendan@mole.gnu.ai.mit.edu)

	* spc-sol2.h (STARTFILE_SPEC): Add crtbegin.o.
	(LIB_SPEC): Add crtend.o for running ctors/dtors.
	* t-sol2 (EXTRA_PARTS): Add crtbegin.o and crtend.o for C++.
	(FIXINCLUDES): Deleted.
	* configure (sparc-*-solaris2*): Set fixincludes here.

Tue Oct 13 20:15:45 1992  Eric Youngdale (youngdale@v6550d.nrl.navy.mil)

	* make-cc1.com: Simplify extraction of YYEMPTY from cp-parse.c.
	Generate c-parse.y, objc-parse.y from c-parse.in if required.
	Pat Rankin did some of this.

Tue Oct 13 14:06:45 1992  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* sparc.md (in_branch_delay): Allow fpload and fpstore.

	* collect2.c (main): Only install a signal handler for signals
	that already have handlers.
	(fork_execute): Don't ignore signals before calling do_wait.

	* i960.md: Change 'f' constraint for dest to '*f' if it is not the
	only alternative.  Add '*f' dest constraints to all patterns where
	it is valid but was previously missing.

	* i960.h (OVERRIDE_OPTIONS): Enable function inlining.
	* i960.c (g14_save_reg): Delete variable.
	(i960_output_call_insn): Add two new parameters arg_pointer and
	scratch_reg.  Save/set/restore g14 if necessary.
	(i960_expand_call): Delete function.
	* i960.md (call, call_value): No longer call i960_expand_call,
	instead call call_internal/call_value_internal pattern.
	(call_internal, call_value_internal): Rewrite patterns to pass new
	args to i960_output_call_insn.

	* sparc.md (movstrsi+1): Add `+' to constraints for clobbered inputs.

	* i960.c (i960_output_call_insn):  Emit bx instead of b, callx
	instead of callj.

	* sparc.c (sparc_frw_output_function_prologue): Frame pointer base
	must be same as for regular sparc code.

Tue Oct 13 06:02:03 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* loop.c (loop_optimize): Verify that max_uid_for_loop is still
	larger than the uid of any insn.  Increase the number of exit
	blocks from 4 to 32 per loop.
	(find_and_verify_loops): Stop trying to relocate exit blocks when
	allocating a new label would exceed max_uid_for_loop.

	* combine.c (subst): Don't change a conditional branch into a
	conditional move.

	* m88k.md (ext shift patterns): No longer needed.

	* m88k.c (mostly_false_jump): Recognize a sequence properly.
 
Mon Oct 12 22:31:37 1992  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.h (LEGITIMIZE_ADDRESS): Fix typo.

Tue Oct 13 00:14:09 1992  H Lu  (hlu@eecs.wsu.edu)

	* Makefile.in (install-common): Put - on cmd that handles protoize.
	(gcc.o, cccp.o): Define TOOLDIR for the compilation.
	(all HOST_PREFIX_1 targets): Fix typos.

	* x-linux (cpp.a, linux.a, cc1.a, cc1plus.a, gcc.a): Targets deleted.
	(LD, ALIBS, STANDARD_STARTFILE_PREFIX, GPLUSPLUS_INCLUDE_DIR):
	Vars deleted.

	* i386linux.h: Delete NO_JUMPTABLE conditional and contents.
	(GPLUSPLUS_INCLUDE_DIR): Defined.
	(STARTFILE_SPEC): Changed.

	* gen*.c: Include hconfig.h, not config.h.

Mon Oct 12 16:25:22 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* configure.bat, vmsconfig.com: Make hconfig.h.

	* vax.h (PRINT_OPERAND): Detect `double' constants by DFmode,
	since VOIDmode means an integer.

	* mips.h (DEBUG_REGISTER_NAMES): New macro definition.
	* print-rtl.c (reg_names):
	Make it static.  Use DEBUG_REGISTER_NAMES if that's defined.
	* regclass.c (reg_names): Reinstate the definition here.

	* fixinc.svr4: Delete excess fi in fixing stat.h.

Mon Oct 12 08:10:37 1992  James Van Artsdalen  (jrv@goldman.gnu.ai.mit.edu)

	* Makefile.in (install-fixincludes): Only delete an existing
	syslimits.h if we install limits.h over it.

	* i386.h (PRINT_REG): Undo Oct 11 change.
	(DEBUG_PRINT_REG): New macro, used from print-rtl.c.

	* conditions.h (CC_NOT_SIGNED): New macro.
	* final.c (alter_cond): If CC_NOT_SIGNED, convert signed
	conditions to unsigned.

	* i386.md (cmpstrM patterns): Compare strings of unsigned chars,
	not strings of signed chars.

Mon Oct 12 06:31:13 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c (try_combine): Save DEST of NI2PAT before calling
	recog_for_combine, which might make it a PARALLEL.

	* emit-rtl.c (gen_lowpart_common): Allow MODE_PARTIAL_INT where
	MODE_INT is allowed.

	* combine.c (try_combine): Properly call single_set when validating
	the result of a define_split.

Mon Oct 12 00:24:29 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* calls.c (calls_alloca): Don't look within DECL_INITIAL if it's 0.

	* varasm.c (simplify_subtraction): New function.
	* rtl.h (simplify_subtraction): Declared.
	* final.c (output_addr_const): Call it.

	* print-rtl.c (DEBUG_PRINT_REG): Renamed from PRINT_REG.
	(print_rtx): Use DEBUG_PRINT_REG.

Sun Oct 11 16:27:53 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu.edu)

	* genrecog.c (merge_trees): When splitting, remember to clear DUPNO
	in addition to the other things we can test.

	* recog.c (general_operand, immediate_operand, const_double_operand):
	Allow CONST_INT with MODE_PARTIAL_INT.
	(nonmemory_operand): Likewise.

Sun Oct 11 07:53:39 1992  James Van Artsdalen  (james at bigtex.cactus.org)

	* xm-i38v4.h,xm-aix386.h (USE_C_ALLOCA): New macro.  Define if not
	using GNU C's builtin alloca.

	* i386.c (notice_update_cc): Only set CC_IN_80387 for float compares.

	* i386.h (PRINT_REG): Make register name arrays static within this
	macro.

Sun Oct 11 01:41:06 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* jump.c (jump_optimize): Don't optimize jumps to store-flag insns
	when BLKmode values are being compared.

Sat Oct 10 16:51:08 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* print-rtl.c (print_rtx): Print hard reg name as well as number.
	(PRINT_REG): New macro with default definition.
	(reg_name): Moved here.
	* regclass.c (reg_name): Deleted.

Sat Oct 10 02:27:14 1992  James Van Artsdalen  (james at bigtex.cactus.org)

	* i386sco.h (TARGET_DEFAULT): New macro - don't make TARGET_IEEE_FP
	default for SCO.

Sat Oct 10 04:52:06 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* function.h (struct function): New fields const_rtx_hash_table,
	const_rtx_sym_hash_table, first_pool, last_pool, pool_offset.
	* function.c (pop_function_context, push_function_context):
	Call {save,restore}_varasm_status.
	* varasm.c: Include function.h.
	(restore_varasm_status, save_varasm_status): New fns.
	(init_const_rtx_hash_table): Allocate the hash tables in obstack.
	(force_const_mem): Don't use CONST_DOUBLE_MEM for nested fns.
	(clear_const_double_mem): Do nothing for nested fns.
	* Makefile.in (varasm.o): Dep on function.h.

Fri Oct  9 18:16:18 1992  Brendan Kehoe  (brendan@mole.gnu.ai.mit.edu)

	* cp-decl.c (duplicate_decls): Only find out if olddecl is a
	friend after we know it's not a TREE_LIST.

Fri Oct  9 18:10:19 1992  Jim Wilson  (wilson@geech.gnu.ai.mit.edu)

	* sparc.c (sparc_type_code): Return reasonable result for COMPLEX_TYPE.

Fri Oct  9 14:33:26 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* reorg.c (start_of_epilogue_needs): New variable.
	(mark_target_live_regs): Add in start_of_epilogue_needs when
	NOTE_INSN_EPILOGUE_BEG is scanned.
	(dbr_schedule): Compute start_of_epilogue_needs and update
	end_of_function_needs to include sets by all instructions
	following NOTE_INSN_EPILOGUE_BEG.

	* m88k.md (return): Always available once reload has completed.
	(epilogue): Use a return insn rather than an indirect jump.

Fri Oct  9 12:36:54 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* spc-sol2.h (DBX_DEBUGGING_INFO): Defined.

	* function.c (aggregate_value_p): Return 1 if regs we would use
	are not all call-clobbered.

	* stmt.c (POPSTACK): Pop discarded elts off all the stacks as we go.

Fri Oct  9 07:30:14 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reorg.c (mark_target_live_regs): Fix bug in last change.

	* combine.c (subst, case SUBREG): Don't make a new REG for
	stack, frame, or arg pointer.
	* emit-rtl.c (gen_lowpart_common, gen_highpart, operand_subword):
	Likewise.

	* local-alloc.c (optimize_reg_copy_1): Tighten up code to properly
	handle the case when SRC or DEST is a multi-word hard register
	and only some parts of the register are set or used.  Also, avoid
	updating register status for DEST if we can't do the optimization.

	* jump.c (jump_optimize): Only use a REG as a target.

	* alpha.c (alpha_builtin_saveregs): Don't use value of NREGS greater
	than 6 when computing ARGSIZE.

	* va-alpha.h (va_arg): Put parens around all uses of __VA arg.

Thu Oct  8 18:45:00 1992  Arne H. Juul  (arnej@lise.unit.no)

	* Makefile.in (install-common-headers): added missing 'then'

Thu Oct  8 15:52:22 1992  Michael Meissner  (meissner@osf.org)

	* mips.h (SELECT_RTX_SECTION): Rename macro from obsolete name
	SELECT_SECTION_MODE.

	* i386rose.h (whole file): Remove #ifdef before #undef of macros.
	(LEGITIMATE_CONSTANT_P): Define, so that when half-pic is on,
	half-pic addresses are not considered legitimate.
	(SELECT_RTX_SECTION): If putting a half-pic pointer that is
	loaded, put the pointer into the data section, rather than the
	readonly_data_section.
	(SELECT_SECTION): Define.
	(ASM_OUTPUT_DOUBLE): If not cross compiling, emit double as two
	longs, otherwise emit .double directive.
	(ASM_OUTPUT_FLOAT): If not cross compiling, emit float as long,
	otherwise emit .float directive.
	(perform_fixdfsi): Copy arg to memory variable.
	(SIZE_TYPE): Define to be long unsigned int.
	(PTRDIFF_TYPE): Define to be int.
	(WCHAR_TYPE)L: Define to be unsigned int.

	* i386.md (movsi): Remove obsolete half-pic code.
	(call insns): For half-pic insns, force address into register.

Thu Oct  8 14:22:05 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Makefile.in (install-common-headers): Fix dir in chmods for assert.h.

	* va-i860.h (__savereg, va_arg): Put uses of __va in parens.

	* vax.h (PRINT_OPERAND): Define new code, D.
	* vax.md (movdi): Use D code for operand 1.

Thu Oct  8 13:23:25 1992  Jeffrey A. Law  (law@mole.gnu.ai.mit.edu)

	* pa.md (fp_alu function unit, case fpcc): Fpcc instructions use
	the fpalu unit.  In the most common case their result will be used
	in a ftest instruction.  Minimum distance between the fcmp and 
	ftest instruction is 4.

Thu Oct  8 06:41:15 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* function.c (assign_parms): Provide a safe value for
	DECL_INCOMING_RTL in case of syntax errors.

	* dwarfout.c (dwarfout_init, dwarfout_finish): Don't output labels
	or .debug_aranges entries for .data1 and .rodata1 as these
	sections aren't currently used.

Thu Oct  8 04:44:17 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reorg.c (mark_target_live_regs): Look at USE insns made by
	update_block when scanning forward past target.
	(mark_target_live_regs, dbr_schedule): Use GET_RTX_CLASS.

	* cse.c (PATHLENGH): Change from 20 to 10 to speed up compilations.

Thu Oct  8 03:07:33 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* fold-const.c (invert_truthvalue): Never alter ARG.

	* Makefile.in (TAGS): Exclude =*.[chy] from tags table.

	* c-lex.c (yylex): For floats, use REAL_VALUES_LESS to distinguish
	underflow from overflow.  Delete special case for 0.0.

Wed Oct  7 16:25:19 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* dwarfout.c (dwarfout_{begin,end}_function): New functions.
	(body_{begin,end}_attribute): New functions.
	(dwarf_attr_name): Print AT_body_begin and AT_body_end.
	(output_{local,global}_subroutine_die): Output the new attributes.
	* dwarf.h (enum dwarf_attribute): Add At_body_begin and AT_body_end.
	* final.c (final_scan_insn): Call dwarfout_begin_function.
	(final_end_function): Call dwarfout_end_function.

	* m88k.h (FASTEST_ALIGNMENT): Define as 8 for -m88110 otherwise 4.
	(CONSTANT_ALIGNMENT, DATA_ALIGNMENT): Base on FASTEST_ALIGNMENT.
	* m88k.md (movstrsi): No predicate is needed for the source or
	destination.
	* m88k.c (best_from_align): Add a target processor dimension for
	-m88000, -m88110, and -m88100.
	(expand_block_move): Choose method and limits based on -m88xxx option.
	(block_move_no_loop): Extend to allow DImode.
	* m88k-move.sh: Add the modules moveDI96x and moveDI41x through
	moveDI47x.
	* t-m88k, t-m88kluna, t-m88ksvr4: New modules added to MOVE_ASM.

	* m88k.c (output_call): Use different syntax for GAS.

	* m88k.h (READONLY_DATA_SECTION): Don't override svr4.h
	(ASM_OUTPUT_CASE_LABEL): For svr4, use .rodata.

Wed Oct  7 15:47:19 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* configure (i486-ncr-sysv4): Use i386v4.h.
	(i386-*-sysv4, i386-*-linux, i386-*-sysv): Handle 486 too.
	(i486-*-sysv4, i486-*-linux): Deleted.
	* i486v4.h, i486linux.h: Files deleted.

Wed Oct  7 12:40:00 PDT 1992  Ron Guilmette (rfg at netcom.com)

	* populate (progname):  Just the basename of $0 please.
	(target_dir):  Use abs_target_dir and rel_target_dir for clarity.
	(source_dir):  Use abs_source_dir and rel_source_dir for clarity.
	(*):  List input and output dirs on startup.
	(*):  Don't be so verbose; Don't echo names of output dirs/files as
	they are created.

	* fixinc.svr4 (<sys/signal.h>):  Fix types of SIG_DFL, SIG_ERR,
	SIG_IGN, and SIG_HOLD.
	(<sys/stat.h>): Turn definitions of stat, lstat, fstat, and mknod
	into ANSI syntax and add __ to variables used.

	* c-parse.in (component_decl_list):  Do pedwarn for missing semicolon
	after last field decl.

Wed Oct  7 09:49:34 1992  Michael Meissner  (meissner@osf.org)

	* decstatn.h (LINK_SPEC): Don't define if it is already defined,
	ie dec-osf1.h has included decstatn.h.

	* dec-osf1.h (MACHINE_TYPE): Redefine to say DEC OSF/1 instead of
	ultrix.

Wed Oct  7 03:50:11 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* configure (target_cpu_default): Var renamed from target_default.
	Set it to 2, for a 486.  Define TARGET_CPU_DEFAULT macro.

	* i386.h (TARGET_CPU_DEFAULT): Add default definition.
	(TARGET_SWITCHES): Include that in the default.

	* toplev.c (main): Recover correctly from invalid -Wid-clash option.

	* cccp.c (finclude): Set fp->buf earlier, so it's freed on error.

	* Makefile.in (install-common-headers): Avoid ! operator, for assert.h.

Tue Oct  6 20:21:21 1992  Jim Wilson  (wilson@geech.gnu.ai.mit.edu)

	* unroll.c (copy_loop_body, JUMP_INSN case): Delete abort in the
	code for setting the JUMP_LABEL field.

Tue Oct  6 19:29:19 1992  Brendan Kehoe  (brendan@mole.gnu.ai.mit.edu)

	* cp-call.c (build_overload_call_real): If `functions' is an
	ADDR_EXPR (as with operator new and delete), give the name of its
	argument as the error fn.

Tue Oct  6 14:15:15 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* configure: Correct conditional in setting build_xm_file.

	* function.c (get_first_block_beg): New function.

	* cross-make (assertdir): Override usual definition.
	* Makefile.in (install-common-headers): chmod assert.h in proper dir.
	Use $(assertdir).
	(assertdir): New variable.
	(install-dir): Create dir $(includedir).
	(includedir): Make this /usr/local/include.

Tue Oct  6 12:05:35 1992  Jeffrey A. Law  (law@mole.gnu.ai.mit.edu)

	* pa.md (memory function unit, load case): Loads take two cycles,
	not one.

Tue Oct  6 07:56:05 1992  Torbjorn Granlund  (tege@hal.gnu.ai.mit.edu)

	* pa.md (adddi3): Fix typo.

Tue Oct  6 04:03:40 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* m68k.c (floating_exact_log2, standard_68881_constant_p): 
	(standard_sun_fpa_constant_p): Use REAL_VALUE_FROM_CONST_DOUBLE.
	(print_operand): Likewise.

Mon Oct  5 18:39:29 1992  Brendan Kehoe  (brendan@mole.gnu.ai.mit.edu)

	* tree.h (TREE_VIA_PROTECTED): Set protected_flag, not static_flag.

Mon Oct  5 18:27:08 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Makefile.in ($(srcdir)/INSTALL): Add -D INSTALLONLY.

Mon Oct  5 14:46:08 1992  Brendan Kehoe  (brendan@mole.gnu.ai.mit.edu)

	* cp-parse.y (unary_expr): Use the `new' rule when looking for
	something like `new(foo) char[10]'.

	* cp-decl.c (grokparms): Don't call digest_init on default args.

Mon Oct  5 02:21:06 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* reload1.c (allocate_reload_reg): Always check for asm
	on failure instead of simply aborting.

	* optabs.c (init_optabs): Use cabs as the only libcall for abs.

Mon Oct  5 03:10:14 1992  Mark Eichin  (eichin at tweedledumber.cygnus.com)

	* c++ (numargs): $# was used after set was called; instead, save
	$# in $numargs and use that value instead.

Sun Oct  4 12:34:00 PDT 1992  Ron Guilmette  (rfg at netcom.com)

	* dwarfout.c (hard-reg-set.h):  Included to get decl of `reg_names'.
	(PRINT_REG):  Default definition added.
	(dwarf_last_decl):  Variable declaration added.
	(output_reg_number):  New function; handle -fverbose-asm reg printing.
	(output_mem_loc_descriptor, output_loc_descriptor):  Call it.
	(output_decl):  Set `dwarf_last_decl' each time this fn is called.
	* i386.h (hi_reg_name, qi_reg_name, qi_high_reg_name): Declared.
	(PRINT_REG):  Definition moved from i386.c.
	* i386.c (hi_reg_name, qi_reg_name, qi_high_reg_name): Not static.
	(PRINT_REG):  Definition moved to i386.h.

Sun Oct  4 00:53:37 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-decl.c (shadow_tag_warned): Use pedwarn for useless keyword.

	* c-lex.c (readescape): No warning if digits in \x are all 0's.

Sat Oct  3 14:37:39 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* optabs.c (expand_complex_abs): New function.
	* expr.h (expand_complex_abs): Add declaration.

Sat Oct  3 07:29:09 1992  Michael Meissner  (meissner@osf.org)

	* configure (mips-dec-osf1): Use x-dec-osf1 instead of x-decstatn.

	* x-dec-osf1 (new file): Like x-decstatn, except that INSTALL is
	installbsd -c.

Sat Oct  3 05:04:43 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* toplev.c (rest_of_decl_compilation): Don't call
	dwarfout_file_scope_decl as this causes duplicates.

Sat Oct  3 01:35:23 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* explow.c (allocate_dynamic_stack_space) [MUST_ALIGN]:
	Always add to size, always round up to STACK_BOUNDARY,
	always round the address.

	* rtl.h (gen_realpart, gen_imagpart): Declared.

Fri Oct  2 20:03:53 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* emit-rtl.c (gen_realpart, gen_imagpart): New functions.
	* optabs.c (expand_unop, expand_binop): Use them.
	* expr.c (expand_expr): Use them.

	* cccp.c (main): Handle -U before -D (and -A).

	* assert.h: Add magic comment at beginning.
	* Makefile.in (includedir): New variable.
	(USER_H): assert.h removed from value.
	(install-common-headers): Install assert.h separately, in includedir,
	but not if file exists and lacks the magic comment.

	* reload1.c (reload): Move test for failure to find any group
	to after the loop over i.  Also check that all the regnos fit
	below FIRST_PSEUDO_REGISTER.

	* expr.c (expand_expr):
	For ABS_EXPR, give expand_unop the operand's mode.

Fri Oct  2 14:58:06 PDT 1992  Ron Guilmette  (rfg at netcom.com)

	* i386v4.h (DBX_REGISTER_NUMBER):  Don't abort here on pseudo-regs.
	* dwarfout.c (output_mem_loc_descriptor, output_loc_descriptor):
	Catch cases of bogus DECL_RTL values involving pseudo-regs (for all
	target systems) and print an annoying message if we ever see such a
	case.

Thu Oct  1 17:23:08 1992  Michael Meissner  (meissner@osf.org)

	* mips-tfile.c (various): Rename some of the index variables and
	fields to indx, so that it doesn't conflict with the BSD
	index function, which may be #define'd to strchr.  However, the
	MIPS symbol table has a field called index, so #undef index and
	rindex, and write our own functions local_index and local_rindex.

	* mips-bsd.h (CPP_PREDEFINES): Add single underscore in front of
	each of the defines, for RISC-OS 5.0 compatibility.

	* mips-sysv.h (CPP_PREDEFINES): Add single underscore in front of
	each of the defines, for RISC-OS 5.0 compatibility.

	* mips-svr4.h (CPP_PREDEFINES): Add single underscore in front of
	each of the defines, for RISC-OS 5.0 compatibility.

	* mips.h (CPP_PREDEFINES): Add single underscore in front of each
	of the defines, for RISC-OS 5.0 compatibility.

	* mips.c (override_options): Only call setvbuf to make stderr line
	buffered for -mstats on Ultrix, and OSF/1.

Thu Oct  1 15:18:55 1992  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* reload1.c (emit_reload_insns): Add a case to handle
	SECONDARY_MEMORY_NEEDED in the SECONDARY_OUTPUT_RELOAD_CLASS code.
	* sparc.h (SECONDARY_INPUT_RELOAD_CLASS): Also need a temp reg
	when loading HImode and QImode values from memory to FP_REGS.
	(SECONDARY_OUTPUT_RELOAD_CLASS): New macro.  Define this to handle
	HImode and QImode stores from FP_REGS to memory similar to above.

Thu Oct  1 13:36:52 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* cccp.c (rescan): If traditional, recognize # only at bol.

	* expr.c (expand_expr): Just return the lowpart or highpart.

	* configure (i386-*-linux, i486-*-linux): New alternatives.
	* i386linux.h, i486linux.h, xm-linux.h: New files.

	* optabs.c (expand_unop): Handle complex negate and abs val.
	(init_optabs): Set up libcalls for complex abs.
	(init_complex_libcalls): New function.

Thu Oct  1 22:58:45 1992  Eric Youngdale (youngdale@v6550d.nrl.navy.mil)

	* make-cc1.com: Extract line containing "#define YYEMPTY" from
	cp-parse.c, and append to cp-parse.h (a la Makefile.in).

	* cccp.c (main) [VMS]: Use .obj, not .o, in dependencies output.

Thu Oct  1 17:15:49 1992  Chip Salzenberg  (chip@tct.com)

	* c-common.c (declare_function_name): __FUNC__ variables
	are compiler-created, so set DECL_SOURCE_LINE to zero.
	* c-decl.c (pushdecl): Internally generated vars can be
	detected with DECL_SOURCE_LINE of zero, not DECL_IGNORED_P.

Thu Oct  1 13:07:21 1992  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.c (emit_move_sequence): When making a reference to the data
	space before reload, emit an insn sequence which is much more 
	likely to create "addil" instructions rather than "ldil; add" 
	sequences.  Doing so greatly reduces the chance of running into a
	HPUX linker bug when compiling kernels.

	* pa.h (TARGET_KERNEL): New switch "-mkernel" which forces gcc to
	avoid "ldil; add" sequences when %r29 and instead generate "addil"
	sequences.  This avoids a HPUX linker bug when compiling kernels.
	* pa.md (add high part and dp register): Split into two patterns,
	one for normal code, one for kernels.  Kernel version only allows
	"r1" as the destination register.

	* pa.h (LEGITIMIZE_ADDRESS, SYMBOL_REF case): Emit a sequence
	which will cause "addil" instructions to be emitted instead of 
	"ldil; add" sequences.

Thu Oct  1 01:09:05 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-parse.in, cond.awk: New files.
	* Makefile.in (c-parse.y, objc-parse.y): Construct from c-parse.in.
	(gcc.xtar): Depend on c-parse.y, objc-parse.y.
	(realclean): Delete c-parse.y, objc-parse.y.

	* explow.c (allocate_dynamic_stack_space): If STACK_DYNAMIC_OFFSET
	or STACK_POINTER_OFFSET, always round address up to BIGGEST_ALIGNMENT.

	* gstddef.h: If _ANSI_H_, undef _PTRDIFF_T_, _SIZE_T_, _WCHAR_T.

	* gvarargs.h: In the first part (instead of va-*.h), define
	__gnuc_va_list, as in gstdarg.h.  Always use __gunc_va_list
	as basis for defining va_list.
	Move interaction with BSD-NET2 down to where va_list itself is defined.

	* cccp.c (do_include): Delete unreachable goto after '"' case.

Thu Oct  1 16:57:22 1992  Peter Schauer (pes@regent.e-technik.tu-muenchen.de)

	* dpx2g.h (NO_DOLLAR_IN_LABEL): Undef because gas understands dollars
	in labels and gdb expects them if configured for gas.
	(STARTFILE_SPEC): Include huge.o to be compatible with native cc.
	(ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR):
	(CTOR_LISTS_DEFINED_EXTERNALLY, DO_GLOBAL_DTORS_BODY):
	(STARTFILE_SPEC): Conditionally redefine for a collectless version
	of gcc if USE_COLLECT2 is not defined.

	* dpx2.ifile: New ld command file to support not using collect2.

Wed Sep 30 17:08:32 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* libgcc2.c (__eprintf): Do nothing if inhibit_eprintf is defined.

	* pbd.h, spc-sol2.h, tower.h (NO_UNDERSCORES): Deleted.

	* Makefile.in (install-fixincludes): rm syslimits.h before installing.
	Install it with cp.  Add an else-part to the if that installs it.

	* c-decl.c (start_enum): Push obstacks, switch to permanent if global.
	(finish_enum): Pop obstacks.
	(store_parm_decls): When clearing ->names, clear out the values
	from the identifiers, restore shadowed values, and clear ->shadowed.

	* c-decl.c (grokdeclarator): Don't warn of const or volatile function
	in a system header file.

	* sdbout.c: Don't use system syms.h on hpux.

	* cccp.c (do_xifdef): Skip all kinds of whitespace, in bof test.

Wed Sep 30 15:09:10 1992  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* sparc.md (orcc peephole): Don't accept FP reg for operand 0.

Wed Sep 30 00:47:48 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* gstdarg.h, gvarargs.h: Use <...> to include va-*.h.

	* c-decl.c (start_struct): Push the obstacks.
	Switch to permanent if at top level.
	(finish_struct): Pop them.

	* c-decl.c (store_parm_decls): If we have (erroneously) a prototype
	and old-style parm decls, throw away the old-style parm decls.

	* configure: Default $build after $host.  Canonicalize all three
	config names before the main dispatch and save in $canon_host, etc.
	Write these into config.status and on terminal at the end.

Tue Sep 29 18:41:54 1992  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* unroll.c (find_splittable_givs): recog_memoized failure return
	is -1 not 0.

Tue Sep 29 22:19:48 1992  Roland McGrath  (roland@geech.gnu.ai.mit.edu)

	* config.sub (os handling): Recognize `linux' as a valid os.

Tue Sep 29 16:05:47 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* limitx.h: Use <...> in #include.

	* Makefile.in (ENQUIRE_CFLAGS): Remove -DNO_SC.

Tue Sep 29 10:14:27 1992  Richard Kenner  (kenner@.vlsi1.ultra.nyu.edu)

	* optabs.c (expand_binop): Convert X - C to X + (-C).

Mon Sep 28 22:44:17 1992  Jim Wilson  (wilson@cygnus.com)

	* reload.c (find_reloads_address): If tem != ad, then create a new
	mem to hold it and store it back into memrefloc.

Mon Sep 28 10:44:55 1992  Chip Salzenberg  (chip@tct.com)

	* regclass.c: Fix comment syntax after #endif.

Mon Sep 28 17:15:22 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* gstdarg.h (va_arg, va_start): Explicitly cast to __gnuc_va_alist.

Mon Sep 28 17:12:04 1992  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* unroll.c (copy_loop_body, JUMP_INSN case): When invert jump
	insn, must first construct new insn before trying to invert it,
	so that validate_change will work properly.

	* unroll.c (find_splittable_givs): Pass mem_mode not mode to
	memory_address_p.

	* unroll.c (copy_loop_body, JUMP_INSN case): When setting
	JUMP_LABEL field, verify that what we think is a label actually
	is.  If it isn't then map the old JUMP_LABEL to find the new one.

	* sparc.md (orcc peephole): Don't allow FP regs to match pattern.

	* i960.md (indirect_jump):  Use bx instead of b*, and accept any
	address_operand instead of just a register operand.

	* i960.c (i960_round_tree): Correct conversion of bits to bytes to
	round up to nearest byte.
	(i960_round_align): Likewise.

Mon Sep 28 15:54:18 1992  Michael Meissner  (meissner@osf.org)

	* dec-osf1.h (LINK_SPEC): Fix typo.

Mon Sep 28 08:15:02 1992  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* rs6000.md (subsi3): Remove last change.
	(allocate_stack): Go back to calling subsi3.

Mon Sep 28 02:41:32 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* optabs.c (expand_binop): Use get_insns, not gen_sequence.

	* c-typeck.c (build_unary_op): Address of nested fcn isn't constant.

	* libgcc2.c (__builtin_new): Avoid passing 0 to malloc.

	* m68k.md (indirect_jump): Use address_operand as predicate.

	* c-decl.c (finish_decl): Do the pop_obstacks sooner, when it's
	time to start allocating in the ambient context's obstack.
	Don't call permanent_allocation unless got back to permanent obstack.

Sun Sep 27 13:06:19 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* function.c (assign_parms): If PROMOTE_FUNCTION_ARGS is defined, 
	see if the incoming register should be used in a wider mode.
	(expand_function_start): Likewise for return value if
	PROMOTE_FUNCTION_RETURN is defined.
	* calls.c (struct arg_data): New field unsignedp.
	(expand_call): Handle PROMOTE_FUNCTION_ARGS and
	PROMOTE_FUNCTION_RETURN.

	* alpha.h (FUNCTION_VALUE): Promote mode for return value.

	* alpha.h (BYTE_LOADS_SIGN_EXTEND): Define.

	* rs6000.md (subsi3): Don't bother calling negate_rtx for constant;
	we shouldn't be called with a constant.
	(maskir patterns): Don't mention an operand before it is used;
	use operand number 1 for operand with '0' constraint.
	(allocate_stack): Use reg_or_short_operand for predicate of
	allocation amount; use negate_rtx and always make a PLUS.

	* romp.h (EXTRA_CONSTRAINT, case 'Q'): Check for MEM instead of
	calling memory_operand.
	(SHIFT_COUNT_TRUNCATED): No longer define this.

Sat Sep 26 18:14:15 1992  Michael Meissner  (meissner@osf.org)

	* config.sub (os handling): Recognize riscos as an operating
	system.

	* configure (dec-osf1): Use x-decstatn for xmake_file.
	(mips computers): Handle RISC-OS 5 vs. RISC-OS 4 configuration
	changes -- RISC-OS 5. passes -non_shared by default.

	* mips-5.h (new file): RISC-OS rev 5 config file.
	* mips-5bsd.h (new file): RISC-OS rev 5, bsd 4.3 config file.
	* mips-5g4.h (new file): RISC-OS rev 5, svr4 + stabs config file.
	* mips-5gbsd.h (new file): RISC-OS rev 5, bsd 4.3 + stabs config file.
	* mips-5gdb.h (new file): RISC-OS rev 5 + stabs config file.
	* mips-5gsysv.h (new file): RISC-OS rev 5 svr3 + stabs config file.
	* mips-5svr4.h (new file): RISC-OS rev 5 svr4 + stabs config file.
	* mips-5sysv.h (new file): RISC-OS rev 5 svr3 config file.

	* dec-osf1.h (LINK_SPEC): Pass -non_shared to linker unless
	-shared was passed.
	(SIZE_TYPE): Define as long unsigned int.
	(PTRDIFF_TYPE): Define as int.
	(WCHAR_TYPE_SIZE): Define as SHORT_TYPE_SIZE.

	* decrose.h (MACHINE_TYPE): Shorten verbage.

	* i386rose.h (TARGET_VERSION): Print appropriate information.

	* xm-mips.h (HAVE_VFPRINTF, HAVE_PUTENV): Define on DEC OSF/1.

	* mips.c (siginfo): Print just current filename, and function
	being compiled.

	* mips-tfile.c (Size_t): Use long unsigned on OSF/1.
	(toplevel): Don't define rindex and index on OSF/1.

Sat Sep 26 17:46:57 1992  Torbjorn Granlund  (tege@jupiter.sics.se)

	* arm.md (comment before extendhisi2): Remove the lie.
	(zero_extendhisi2): Rewrite to work if op0 == op1.  Use
	gen_lowpart in preparation code.
	(extendqisi2, extendhisi2): Likewise.
	(extendqihi2): Expand.

	* arm.md (restorehi): Rewrite for correctness, efficiency, and
	clarity. Avoid generating insns involving truncate.  Generate
	needed pseudos in preparation statements.
	(storehi): Likewise.
	(storeinthi): Likewise.
	(movhi): Call gen_storehi, gen_restorehi, gen_storeinthi according
	their new definitions.  Use force_reg to put address in register.

	* m68k.md (indirect_jump): Use %a0 for output, and p for constraint.

Sat Sep 26 02:42:42 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* reload1.c (eliminate_regs_in_insn): Rerecognize if move insn
	becomes a non-move.

	* Makefile.in (install-fixincludes):
	Use - when making syslimits.h; fix if-statement syntax.

	* jump.c (jump_optimize): When handling dispatch table that always
	goes to the same place, verify previous insn exists.

	* c-typeck.c (common_type): Renable code to merge qualifiers
	given two pointers to compatible types.

Sat Sep 26 12:02:38 PDT 1992  Ron Guilmette  (rfg at netocm.com)

	* dwarfout.c (location_attribute): If DECL_RTL looks like (MEM pseudo),
	treat that variable as optimized away.

Fri Sep 25 19:48:46 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-decl.c (explicit_flag_signed_bitfields): New variable.
	(c_decode_option): Set that for -f[un]signed-bitfields.
	(grokdeclarator): If that's set, and -fsigned-bitfields,
	disregard -traditional when handling bitfield signedness.

	* configure: Handle --build option.  Make link hconfig.h.
	* Makefile.in: In the targets such as $(HOST_PREFIX_1)rtl.o,
	use sed to make them include hconfig.h instead of config.h.
	(distclean): Add command to delete hconfig.h.

Fri Sep 25 19:56:35 1992  Brendan Kehoe  (brendan@mole.gnu.ai.mit.edu)

	* cp-search.c (compute_visibility): Don't mess with the context.

	* cp-decl.c (grokdeclarator): Return value from do_friend
	properly; this shouldn't have gone in yet.

Fri Sep 25 02:23:51 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-typeck.c (initializer_constant_valid_p): Really use endtype.

	* cccp.c (do_include): "Concatenate" multiple "strings" in #include.

	* vmsconfig.com: Renamed from configure.com.

	* next.h (CPP_PREDEFINES): Define __ARCHITECTURE__.

	* dbxout.c (dbxout_symbol): For anonymous enum, output type anyway.

Fri Sep 25 01:33:36 1992  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* function.h (struct function): Add epilogue_delay_list field.
	* function.c (push_function_context): Save epilogue_delay_list.
	(pop_function_context): Restore epilogue_delay_list.

	* sparc.md (nonlocal_goto): Force operands[0] to be a register.

	* va-sparc.h (va_arg): Add 3 more (void *) casts to avoid warnings
	with -Wcast-align.

	* sparc.c (SF_MODES): Accept all single word or smaller integer
	modes not just SImode.  These are needed for fix/float conversions.

	* sched.c (sched_analyze_2, PRE_DEC case): Call sched_analyze_2 in
	addition to sched_analyze_1.

	* va-i960.h (va_start):  Must access anonymous arg as offset from
	start of argument block.

	* i960.md (movdi, movti, movdf, movtf): Make store zero to memory
	a separate case, only accept offsettable memory addresses, and call
	adj_offsettable_operand to calculate subword addresses.

	* i960.c (i960_output_ldconst): Pass missing xoperands argument to
	output_asm_insn call.

	* a29k.md (movti):  Split CONST_INTs into 4 moves, and force all
	other constants to memory.

Thu Sep 24 21:51:46 1992  Brendan Kehoe  (brendan@mole.gnu.ai.mit.edu)

	Complete Cygnus<-->FSF merge.

	Thu Sep 24 17:05:27 1992  Brendan Kehoe  (brendan@rtl.cygnus.com)

	* cp-decl.c (pushdecl): Use a friendly abort rather than an assert.
	(grokparms): Pass whether init is set or not for the initialized
	parameter to grokdeclarator.

	Wed Sep 23 22:09:44 1992  Mike Stump  (mrs@cygnus.com)

	* cp-class.c (finish_struct), cp-decl2.c (warn_nonvdtor),
	cp-tree.c (layout_basetypes), cp-tree.h (warn_nonvdtor):  Re-enable
	warnings for non-virtual destructors in some situations.

	Wed Sep 23 15:42:33 1992  Mike Stump  (mrs@cygnus.com)

	Wed Sep 23 16:31:27 1992  Michael Meissner  (meissner@osf.org)

	* cp-decl.c (duplicate_decls): Cast bcopy arguments to char * to
	avoid warning on OSF/1.

	Wed Sep 23 11:36:44 1992  Brendan Kehoe  (brendan@rtl.cygnus.com)

	* cp-decl.c (start_method): Give the name of the class if a method's
	being defined again, rather than say "aggregate scope". 
	* cp-decl2.c (grokfield, grokbitfield, groktypefield): Ditto.

	Tue Sep  1 22:55:59 1992  Paul Eggert  (eggert@twinsun.com)

	* cp-cvt.c (convert_to_integer): Prefer unsigned
	arithmetic if the output type is unsigned and is no more precise than
	the computation type.  This avoids unnecessary sign extension.

	Tue Sep 15 20:26:18 1992  John F Carr  (jfc at Athena.MIT.EDU)

	* cp-pt.c (tsubst): Don't call layout_type near start of function
	with T.  const and volatile attributes don't affect the memory
	structure of the type, and T may not yet be a valid argument for
	layout_type (for example, if it is an uninstantiated template).
	Individual switch cases will call layout_type if necessary.

	Mon Sep 21 15:59:22 1992  Brendan Kehoe  (brendan@rtl.cygnus.com)

	* cp-decl.c (pushdecl): Check if DECL_SOURCE_LINE is non-zero, not
	if DECL_IGNORED_P is set, when checking for shadowing.  We no longer
	need DECL_IGNORED_P on builtin types.
	(record_builtin_type): Don't set DECL_IGNORED_P for a builtin type.

	* cp-decl.c (start_decl): When working with virtual functions,
	always use the node's DECL_CLASS_CONTEXT.
	* cp-method.c (hack_identifier): Ditto.
	* cp-search.c (compute_visibility): Ditto.

	* cp-decl.c (grokdeclarator): Don't allow a member to be declared
	extern.

	* cp-decl.c (grokdeclarator): Return a void_type_node if we're
	looking at a friend (even after calling do_friend).
	(pushdecl): Disable some code that's untested and
	doesn't necessarily help DWARF right now.
	(finish_function): Always emit debugging info for the
	return type of a function.
	(pushdecl): Don't change the DECL_CONTEXT of virtual
	methods.
	(finish_enum): Always output debugging info for enums.
	(grokdeclarator): It's an error if we're doing an init of an extern
	at the top level.  If we are at the top level, just warn.

	* cp-typeck.c (comp_target_parms): Check if strict is non-zero, not
	just > 0.
	(build_function_call_real): Don't return an error-mark node when
	they call "main" from within the fn, it's only a pedantic warning.
	(pointer_int_sum): Reword warning when using a ptr-to-mem in arith.

	* cp-tree.c (layout_basetypes): Make record_align and const_size
	unsigned.

	Mon Sep 21 14:53:43 1992  Brendan Kehoe  (brendan@rtl.cygnus.com)

	* cp-tree.h (flag_no_ident): Add extern decl for cp-lex.c.

	* cp-decl.c (duplicate_decls): Save the DECL_UID and DECL_FRIEND_P
	info from olddecl.  Otherwise, they'd get clobbered when newdecl's
	contents get copied into olddecl.

	* cp-lex.c (check_newline): Delete pedantic error about using #ident,
	since cccp.c already gives a warning.  In the case that
	ASM_OUTPUT_IDENT is defined, only actually spit it out if flag_no_ident
	is not set.

	Sat Sep 19 14:53:31 1992  Brendan Kehoe  (brendan@rtl.cygnus.com)

	Sat Sep 19 11:37:11 1992  John F Carr  (jfc at Athena.MIT.EDU)

	* cp-decl.c (finish_decl):  Don't call
	CLASSTYPE_DECLARED_EXCEPTION if TYPE is error_mark_node, to avoid
	referencing a nonexistent field.

	Fri Sep 18 14:06:06 1992  Brendan Kehoe  (brendan@rtl.cygnus.com)

	* cp-parse.y (component_decl): Remove sorry about not implementing
	methods in anonymous unions---they're illegal, and we generate an
	error elsewhere to that effect.

	* cp-decl.c (start_method): Make the error message about a
	duplicated member a little more informative.

	Fri Sep 18 12:28:13 1992  Brendan Kehoe  (brendan at rtl.cygnus.com)

	* cp-parse.y: Define YYDEBUG if SPEW_DEBUG is defined.
	(debug_yytranslate): YYDEBUG will always be defined, no need to test. 

	Fri Sep 18 10:46:19 1992  Brendan Kehoe  (brendan@rtl.cygnus.com)

	* cp-parse.y (unary_expr): When parsing delete, first complain if
	it's a non-pointer, then check if it's a pointer with the value zero.
	Also be sure not to call build_delete if that's the case.

Thu Sep 24 18:03:07 1992  Michael Meissner  (meissner@osf.org)

	* mips.h (MIPS_VERSION): Set Meissner version # to 27.
	(STRUCT_VALUE_REGNUM): Delete macro.
	(STRUCT_VALUE): Define as 0, so that structure return addresses
	are passed as the first argument.  This fixes various codegen
	problems with functions returning structures.

	* mips.c (init_cumulative_args): Don't advance arg pointer if
	function returns a structure.

Thu Sep 24 12:38:31 1992  Torbjorn Granlund  (tege@wombat.gnu.ai.mit.edu)

	* pa.h (REGISTER_MOVE_COST): Fix typo.  Use `||' instead of `|'.
	(REG_CLASS_FROM_LETTER): Don't handle 'r' constraints here.
	* pa.c (clobbered_register): Delete.
	(srcsi_operand): Return 1 also for things matching
	depi_cint_operand.
	(secondary_reload_class): Replace.
	* pa.md (ldo/ldil SImode and HImode recognizers): Use
	"const_int_operand" for operand 1 and simplify final condition. 
	Remove `n' constraint.
	(depi SImode and HImode recognizers): Remove `n' constraint.
	(plus:SI ... high ... splitter): Don't overwrite input, go via
	clobber operand instead.
	(many patterns): Replace `in' constraint with just `i'.
	(movstrsi): Don't do (clobber (match_scratch)), use explicit
	pseudos instead, generated in preparation C code.  Don't call
	force_not_mem for operand 2.
	(movstrsi recognizer): Add `&' to operand 3.
	(andsi3): Fix typo.
	(iorsi3): Fix typo.
	(load-shift-16): New optimizer.
	(load-shift optimizers): Set "type" attr.

Thu Sep 24 15:17:38 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* toplev.c (lang_options): Add Objc options.

	* configure.bat: Use xgcc, not gcc.

Thu Sep 24 06:30:47 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-lex.c (yylex, case '"'): Initialize arg pased to readescape.

	* genattrtab.c (length_used): New variable.
	(walk_attr_value): Set it when we have (eq_attr "length" ...).
	(write_const_num_delay_slots): Value is 1 unless LENGTH_USED is set.

	* reorg.c (mark_set_resources, case CC0): Set RES->CC if IN_SEST.

	* regclass.c (forbidden_inc_dec_class, in_inc_dec): New variables.
	(regclass): Don't alloca the costs twice.
	Initialize forbidden_inc_dec_class.
	For regs that have inc-dec, ignore forbidden classes.
	(record_address_regs): Update in_inc_dec.

Thu Sep 24 02:36:00 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* syslimits.h: New file, includes system's limits.h.
	* limitx.h: Include syslimits.h instead of system's limits.h.
	* Makefile.in (USER_H): Add syslimits.h.
	(install-fixincludes): If we fix system's limits.h, install that
	as syslimits.h

	* c-lex.c (readescape): New arg ignore_ptr.
	(yylex): Pass new arg, handle result that comes back.

Wed Sep 23 19:26:42 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reload.c (find_reloads_address): Properly check for constant address.

	* cse.c (simplify_unary_operation, case SIGN_EXTEND): Use
	HOST_BITS_PER_WIDE_INT, not HOST_BITS_PER_INT.

	* fold-const.c (fold_convert): Add missing cast to HOST_WIDE_INT.

	* jump.c (jump_optimize): Tighten up test for when we can't
	delete a set of CC0.
	Don't insert insns between set and use of CC0.

	* final.c (shorten_branches): Correctly access insn needing delay slot.

	* combine.c (significant_bits, num_sign_bit_copies): Handle SUBREGs
	made for promoted variables.

	* reorg.c (fill_simple_delay_slots): Don't make copy of insn that
	references CC0.

	* romp.md (define_attr "type"): New type "ibranch".
	(define_attr "length"): Set length for "ibranch" type.
	(define_attr "in_delay_slot"): Add new type "ibranch";
	for "branch", only has delay slot if length is 4.
	(define_attr "cc_type"): Add new type "ibranch".
	(indirect branches): Now type "ibranch".

	* alpha.c (alpha_gp_dead_after): Return 0 if not optimizing.

Wed Sep 23 00:11:35 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* gvarargs.h: Finish changing _ANSI_H to _ANSI_H_.

Tue Sep 22 23:39:06 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* i386mach.h (perform_fixdfsi): Copy arg to memory variable.

Tue Sep 22 14:54:38 1992  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* loop.c (basic_induction_var): Inside PLUS, when looking for promoted
	var, make sure it's a REG.

Tue Sep 22 12:21:11 1992  Michael Meissner  (meissner@osf.org)

	* mips.h (MIPS_VERSION): Bump Meissner version # to 26.
	(REG_PARM_STACK_SPACE): Use UNITS_PER_WORD instead of 4, and
	substract FIRST_PARM_OFFSET.
	(FIRST_PARM_CALLER_OFFSET): Delete unused macro.

	* mips.c (init_cumulative_args): Print types of fntype and the
	return type if -mdebuge.

	* decrose.h (CPP_SPEC): Eliminate defining various builtin
	functions with -D<name>=__builtin_<name>, if neither -fbuiltin nor
	-fno-builtin were passed.
	(CC1_SPEC): Eliminate passing -fno-builtin to the compiler if
	neither -fbuiltin nor -fno-builtin were passed.  Eliminate
	%{save-temps: } since gcc no longer gives an unknown switch
	message if it is used.

	* i386rose.h (CPP_SPEC): Eliminate defining various builtin
	functions with -D<name>=__builtin_<name>, if neither -fbuiltin nor
	-fno-builtin were passed.
	(CC1_SPEC): Eliminate passing -fno-builtin to the compiler if
	neither -fbuiltin nor -fno-builtin were passed.  Eliminate
	%{save-temps: } since gcc no longer gives an unknown switch
	message if it is used.
	(MASK_HALF_PIC): Move bit mask to 0x40000000, to allow for i386.h
	to define more switches without overlapping our private switch.
	(TARGET switches): Add -mdebugb to debug half-pic code.
	(OPTIMIZATION_OPTIONS): Only set flag_gnu_linker FALSE always, and
	flag_inline_functions if -O3.  In particular never set
	-fomit-frame-pointer which currently messes up debugging.
	(GO_IF_LEGITIMATE_ADDRESS): Define i386-osfrose version that deals
	with half-pic.
	(OVERRIDE_OPTIONS): Define to initialize half-pic.
	(ASM_FILE_END): Define to dump out half-pic variables if needed.

	* t-i386rose (EXTRA_OBJS): Define as halfpic.o.
	(CONFIG2_H): Add $(srcdir)/halfpic.h.
	(halfpic.o): Add dependencies.

Tue Sep 22 03:12:01 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* reload1.c (choose_reload_regs): When setting reg_has_output_reload,
	loop over multiple regs only for hard reg.  Set reg_is_output_reload
	in separate loop.

Mon Sep 21 12:22:24 1992  Jeffrey A. Law  (law@mole.gnu.ai.mit.edu)

	* reorg.c (mark_set_resources, case REG): A register is set iff
	"in_dest" is nonzero.

Mon Sep 21 14:16:10 1992  Torbjorn Granlund  (tege@jupiter.sics.se)

	* combine.c (make_extraction): Make test whether to use AND or
	{SIGN,ZERO}_EXTRACT depend on UNSIGNEDP.

Mon Sep 21 08:26:55 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* reload1.c (reload): If we can't get a register that we know won't
	interfere with groups, get one that might instead of giving up.

	* reload1.c (reload): Print the needs to the dump file.

Mon Sep 21 02:45:19 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* function.c (put_var_into_stack): Check REG != 0 before dereference.

Sun Sep 20 16:58:05 1992  Fred Fish  (fnf at fishpond.cygnus.com)

	* x-svr4:  New generic SVR4 host makefile fragment.
	* x-i386v4:  File deleted.
	* x-ncr3000:  Get alloca using ALLOCA, not libucb.a.
	* configure (i386-*-sysv4*):  Use x-svr4, not x-i386v4.
	* configure (i486-*-sysv4*):  Use x-svr4.

Sun Sep 20 21:18:15 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* combine.c (subst): Set and compare extend_op with 0, not NULL.

	* cse.c (find_comparison_args): New args PMODE1, PMODE2.
	(fold_rtx, record_jump_equiv): Use them to get modes of comparison.
	(fold_rtx): Associate MINUS with nested PLUS.

	* seq386.h (LPREFIX): Overridden as `.L'.
	(ASM_GENERATE_INTERNAL_LABEL, ASM_OUTPUT_INTERNAL_LABEL): Likewise.

Sun Sep 20 05:53:20 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c (try_combine): Always call set_significant on new
	patterns, so don't call just in split case.

	* combine.c (subst): Move sign extension inside arithmetic
	when we have a constant computation inside another computation.

	* emit-rtl.c (emit_insn_after_with_line_notes): New function.
	* jump.c (jump_optimize): Delete insns that set registers that
	are not used elsewhere.
	Fix some bugs in "if (...) x = a; else x = b;" code.
	Remove uses of reorder_insns.
	Add code to make scc insns for "if (...) x = exp;" if EXP is simple
	enough.
	Optimize "if (...) x = b;" if jumps very expensive; don't use a REG
	as the older value of X since it doesn't help and can hurt.
	Correctly place generated insns in above case.

	* reload.c (find_reloads, find_reloads_toplev): Treat
	BYTE_LOADS_SIGN_EXTEND just like BYTE_LOADS_ZERO_EXTEND.
	* combine.c (subst, simplify_and_const_int, significant_bits):
	Likewise.
	(num_sign_bit_copies, case MEM): New case for BYTE_LOADS_SIGN_EXTEND.
	(num_sign_bit_copies, case SUBREG): Handle just like significant_bits.

Sat Sep 19 15:55:31 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c (combine_instructions): Clear significant_valid 
	at end of combine pass for a function.
	(find_split_point, case MEM): See if first operand of the PLUS
	that makes up an address is complex.
	(subst): Add missing arg to recursive calls when IF_THEN_ELSE
	is an arg of an operator.
	(subst, case IF_THEN_ELSE): Generalize code to propagate comparison
	result into arms by using known_cond.
	If an arm is the first operand of the comparison, make it the
	true arm.
	Remove unneeded comparison when arms are identical.
	Try to convert IF_THEN_ELSE to ABS, (neg (abs X)), [US]MIN, [US]MAX.
	Convert (if_then_else (ne A 0) (OP X C) X) to (OP X (mult A C)).
	(subst, case SET): If we don't have conditional moves,
	convert IF_THEN_ELSE into logical operations.
	(subst, case AND): Always make conditional moves, even if we
	don't support them on the machine.
	(known_cond, extended_count): New functions.
	(gen_binary): For commutative operations, put constant last.

	* combine.c (try_combine): The insns made by a DEFINE_SPLIT might
	contain a PARALLEL and the call to recog_for_combine might add it.

	* combine.c (simplify_comparison, case ASHIFT): Fix typo.

	* combine.c (try_combine): When removing REG_UNUSED note,
	update reg_n_deaths.
	Likewise, when making new REG_DEAD notes for distribute_notes.
	(remove_death, move_deaths): Update reg_n_deaths.
	(distribute_notes): When placing second REG_DEAD or REG_UNUSED note or
	ignoring such a note, update reg_n_deaths.

	* rtl.h (SUBREG_PROMOTED_{VAR,UNSIGNED}_P): New macros.
	* tree.h (DECL_MODE, DECL_RTL): Update comments.
	* expr.h (PROMOTE_MODE): Provide default definition.
	* expr.c (convert_move, convert_to_mode): Strip off a SUBREG made
	for variables with promoted modes.
	(store_expr): Store into variables with promoted modes by
	doing the appropriate extension operation.
	(expand_expr, case VAR_DECL): Generate SUBREGs for promoted objects.
	(expand_expr, case SAVE_EXPR): Likewise for SAVE_EXPRs.
	(expand_increment): Handle increment of promoted objects.
	* function.c (fixup_var_refs{,_insns}): Add new parms for promoted
	mode and signedness; all callers changed.
	Insert mode conversions when required.
	(fixup_var_refs_1): Add new parms for mode and signedness;
	handle SUBREGs for promoted values.
	(assign_parms): Promote the mode of parameters when useful for
	the target machine.
	* function.h (struct var_refs_queue): Remove unused field ORIGINAL.
	Add new fields PROMOTED_MODE and UNSIGNEDP.
	* integrate.c (expand_inline_function): Convert actual to formal's
	mode (in case formal was promoted).
	* loop.c (basic_induction_var): Add new parameter P.
	Check for bivs that are set over multiple insns and also
	allow a SIGN_EXTEND to be used; remove check for MINUS since
	we don't make MINUS with a constant 2nd operand any more.
	* optabs.c (expand_binop, expand_unop): Don't make SUBREG for promoted
	variables as operands.
	* stmt.c (tail_recursion_args): Use mode of DECL_RTL, not
	DECL_MODE.
	(expand_decl): Promote modes of scalar variables when useful on
	target.
	* unroll.c (find_splittable_regs): If any BIV update isn't
	simple, don't split it.
	(final_giv_value): Look for biv updates by matching insns; don't
	try to reparse the insn.
	* rs6000.h (PROMOTE_MODE): New macro.

	* rtlanal.c (reg_set_last): Allow old value to be a SUBREG.

	* rs6000.c (print_operand, case 'h', 'H', 'w'): Minor cleanups.
	* rs6000.h (BRANCH_COST): Increase from 2 to 3.
	* rs6000.md (smax, smin, umax, umin): Add define_splits.

	* alpha.h (PROMOTE_MODE): New macro.
	(REG_ALLOC_ORDER): Put $0 in front of $21-$16.
	(CONST_OK_FOR_LETTER): Change meanings of N, O, and P.
	(BRANCH_COST): Increase from 3 to 4.
	(PREDICATE_CODES): Add new predicates reg_or_cint_operand and
	sext_add_operand.
	* alpha.md (addsi3): subl can be used to sign-extend addition of
	small negative constants.
	(negsi2): Add pattern for (sign_extend (neg ..)).
	(and pattern): Fix typo in constraint.
	(ashldi3): Use new definition of constant letters.
	(smax, smin, umax, umin): Add define_splits.
	(compares): Can compare constant with zero by adding negative of
	constant.
	(store insns): Can store 0 into memory in both integer and FP.
	* alpha.c (sext_add_operand, reg_or_cint_operand): New function.s
	(print_operand, case 'r', case 'R'): Clean up code; use CONST0_RTX.

	* rtl.c (note_insn_name): Fix typo: had NOT_INSN_DELETED_LABEL.

	* jump.c (delete_insn): Don't change labels to NOTEs if we would
	not really have deleted them.

	* genconfig.c (walk_insn_part, case IF_THEN_ELSE): Refine when
	HAVE_CMOVE_FLAG gets set.

Sat Sep 19 14:52:05 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* reload.c (find_reloads): Always use >= with FIRST_PSEUDO_REGISTER.

	* i386mach.h (SIZE_TYPE): Defined.

Sat Sep 19 04:57:06 1992  James Van Artsdalen  (james at bigtex.cactus.org)

	* i386.md (sCOND patterns): Don't allow a MEM in the SET_DEST,
	because these insns can't have input reloads, and a MEM might need
	an input address reload.

	* fold-const.c (fold_convert): Avoid using conversion of unsigned
	to floating; offset value by hand to fit in signed type.

Sat Sep 19 00:50:32 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* integrate.c (subst_constants): Do substitute in address of MEM dest.

	* reload1.c (init_reload): Fix typo.

Fri Sep 18 21:09:15 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* libgcc2.c: Declare _exit as volatile.

	* function.c (assign_parms): Set MEM_IN_STRUCT_P right in stack slots.

Fri Sep 18 15:58:15 1992  James Van Artsdalen  (james at bigtex.cactus.org)

	* fixincludes: Don't look for *.h symlinks if the host doesn't
	have symlinks.

Fri Sep 18 17:34:27 1992  Michael Meissner  (meissner@osf.org)

	* mips.md (call_internal): If the memory address to call is really
	a constant integer, load it up into $at and do the call from
	there.
	(call_value_internal): Ditto.

Fri Sep 18 03:48:17 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* m88k.c (m88k_volatile_code): New variable.
	(print_operand): Track volatile memory references and output a
	serializing instruction before a load when necessary.
	* m88k.h (TARGET_SWITCHES): Add -m{no,}serialize-volatile.
	(OVERRIDE_OPTIONS): -m88110 and -m88000 imply -mserilize-volatile.
	(ADJUST_INSN_LENGTH): Volatile memory operantions may be longer.
	(CC_STATUS_INIT): Reset m88k_volatile_code to the unknown state.
	* m88k.md (load store patterns): Prepend loads and stores with %V
	and %v to track the type and address of the access.

	* m88k.c (m88k_version, m88k_version_0300): New variables.
	* m88k.h (TARGET_OPTIONS): Generalize to -mversion-STRING.
	(OVERRIDE_OPTIONS): Compute m88k_version_0300.
	* m88k.md (call_movstrsi_loop): Renamed from call_block_move_loop.
	Use call-value for the block move patterns.

	* m88kdgux.h (PERFERRED_DEBUGGING_TYPE): Compute based on
	m88k_version.
	(CPU_DEFAULT): Make it -m88000.

	* m88k.h: Don't use #elif

Fri Sep 18 01:08:55 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Makefile.in (install-common-headers): Don't copy byteorder.h.

Thu Sep 17 20:06:22 1992  Brendan Kehoe  (brendan@mole.gnu.ai.mit.edu)

	Complete 13th Cygnus<-->FSF merge.

	Thu Sep 17 13:15:15 1992  Brendan Kehoe  (brendan@rtl.cygnus.com)

	Do some much-needed housecleaning of the C++ front-end.
	* cp-call.c (ideal_candidate): Move `p2' down inside #if 0'd (only)
	section that actually uses it.  Delete unused variable `buf'.
	(build_method_call): Delete unused variable `dtor_specd'.
	* cp-class.c (finish_struct): Delete unused variable `basetype'.
	* cp-cvt.c (convert_to_aggr): Add missing argument decl for `protect'.
	(convert_pointer_to): Delete unused variable `form'.
	* cp-decl.c: Include string.h/strings.h for strncpy() decl.
	Add decls for init_* fns.  Delete unused decl `push_overload_decl_1'.
	Don't use `c_function_varargs', C++ doesn't need it.
	(push_binding_level): Add missing argument decls for
	`tag_transparent' and `keep'.
	(lookup_tag): Add missing argument decl for `tags_transparent'.
	(lookup_name): Add missing argument decl for `prefer_type'.
	(start_decl): Delete unused variables `classname' and `tmpl'.
	(grokvardecl): Add missing argument decl for `initialized'.
	(grokdeclarator): Delete unused variable `t'.
	* cp-decl2.c (get_temp_name): Delete unused variable `temp'.
	(finish_table): Delete unused variable `publicp'.
	(finish_builtin_type): Add missing argument decl for `len'.
	(finish_file): Delete unused variables `asm_out_file' and
	`init_function_name'.
	* cp-except.c (ansi_exception_object_lookup): Add missing
	argument decl for `type'.
	(cplus_expand_throw): Delete unused variables `cname', `name',
	and `raise_id'.
	* cp-init.c: Delete unneeded forward decl of `init_init_processing'.
	(build_new): Delete unused variable `alignment'.
	(expand_vec_init): Add missing argument decl for `from_array'.
	(build_vec_delete): Delete unused variable `rval'.
	* cp-input.c (feed_input): Add missing argument decl for `len'.
	* cp-lex.c: Delete unused variable `nextlastiddecl'.
	(check_newline): Delete unused variable `tmp'.  Place `asm_out_file'
	inside a conditional for ASM_OUTPUT_IDENT.
	(real_yylex): Delete unused variable `typename_scope_in_progress'
	and unused labels `relex' and `reswitch'.
	* cp-method.c: Include string.h/strings.h for strncpy() decl.
	(new_text_len): Deleted.
	(dump_type_prefix): Delete unused variables `print_struct' and `name'.
	(dump_tyupe): Delete unused variable `print_struct'.
	(type_as_string): Delete unused variable `spaces'.
	(do_inline_function_hair): Delete unused variable `cname'.
	(flush_repeats): Delete unused variable `rval'.
	(build_t_desc_overload): Delete unused variable `i'.
	(build_opfncall): Add missing argument decl for `flags'.
	(hack_identifier): Add missing argument decl for `yychar'.
	* cp-parse.y (template_instantiate_once): Delete unused
	variables `id' and `members'.
	* cp-search.c (lookup_field): Add missing argument decl for `want_type'.
	(tree_needs_constructor_p): Add missing argument decl for `i'.
	(dfs_debug_mark): Delete unused variable `pending_vtables'.
	(dfs_get_vbase_types): Delete unused variable `basetype'.
	* cp-spew.c (init_spew): Delete unused variables `pc' and
	`chars_following_typename'.
	(yylex): Delete unused variables `dk' and `tmp'.  Move decl of `t2' down
	to the block that actually uses it.
	* cp-tree.c (build_cplus_staticfn_type): Delete unused variable `ptype'.
	(propagate_binfo_offsets): Delete unused variables `t' and `basetype'.
	(layout_basetypes): Delete unused variable `binfo'.
	(array_type_nelts_total): Delete unused variable `index_type'.
	* cp-tree.h: Add many decls.
	* cp-typeck.c (comp_array_types): Add missing argument decl
	for `strict'.
	(build_compound_expr): Delete unused variable `tmp'.
	(convert_for_initialization): Delete unused label `converted'.
 
	Wed Sep 16 12:51:10 1992  Brendan Kehoe  (brendan@rtl.cygnus.com)

	* cp-decl.c (init_decl_processing): Enable code to add sin and cos
	as built-in functions.

	* cp-decl.c (duplicate_decls): Enable code to preserve the DECL_UID
	of olddecl.

	* cp-search.c (lookup_nested_fields): Make sure we're climbing along
	a chain of nested types, and nothing else.

	Tue Sep 15 17:38:34 1992  Brendan Kehoe  (brendan@rtl.cygnus.com)

	* cp-search.c (lookup_nested_fields): New function.
	* cp-tree.h: Declare it.
	* cp-decl.c (lookup_name): Call it if there's no class-local
	definition.  (It could be nested.)
	* cp-lex.c (do_identifier): Call lookup_nested_field() if necessary.

	Tue Sep 15 12:37:16 1992  Brendan Kehoe  (brendan@rtl.cygnus.com)

	Mon Aug 24 14:58:02 1992  Chip Salzenberg  (chip at animal)

	* cp-typeck.c (build_conditional_expr): Determine constness
	and volatility with TREE_... tests instead of TYPE_... tests.

	Mon Sep 14 18:00:35 1992  Chip Salzenberg  (chip@tct.com)

	* cp-decl.c (grokdeclarator): Remove redundant (and broken)
	test for multiple destructors in a class.

	Fri Jul 31 19:09:10 1992  Chip Salzenberg  (chip@tct.com)

	* cp-cvt.c (convert_to_integer): Push truncation inside COND_EXPR.

 	Mon Sep 14 17:52:45 1992  Chip Salzenberg  (chip@tct.com)

	* cp-class.c (finish_struct): Always write all structure types,
	even if they're defined in a "#pragma interface" header file.
	Otherwise, XCOFF debugging info is messed up.

	Mon Sep 14 17:39:32 1992  Chip Salzenberg  (chip@tct.com)

	* cp-class.c (finish_struct):  ``Actually, I don't understand
	this code.  What is it supposed to do?''  --Niklas Hallqvist

	Mon Sep 14 17:27:23 1992  Chip Salzenberg  (chip@tct.com)

	* cp-decl.c (finish_decl):  Don't dump core if a decl is anonymous.
	A decl is at the global binding level if DECL_CONTEXT is null.
	(grokdeclarator):  Don't globalize a type if its first mention
	is in a parameter.  It's okay to initialize a function in a
	non-global scope.

	Tue Sep 15 12:15:26 1992  Brendan Kehoe  (brendan@rtl.cygnus.com)

	* cp-typeck.c (c_expand_return): Emit a warning when they try to
	return the address of a local variable.

	* cp-decl.c (finish_method): Make sure it's indeed nested before
	checking for the qualified name.

	Mon Sep 14 18:59:25 1992  Mike Stump  (mrs@cygnus.com)

	Wed Sep  2 11:04:24 1992  Chip Salzenberg  (chip@tct.com)

	* cp-decl.c (init_decl_processing): Add sin and cos as built-in
	functions.  Fix type of __builtin_constant_p.

	* cp-lex.c (readescape): For \x, don't include leading 0's in count.

	* cp-typeck.c (build_unary_op): For ADDR_EXPR, just set
	TREE_CONSTANT if staticp, but don't clear TREE_CONSTANT.

	Mon Sep 14 18:54:41 1992  Mike Stump  (mrs@cygnus.com)

	* cp-parse.y (permanent_obstack):  Move to top of file.

	Mon Sep 14 18:50:19 1992  Mike Stump  (mrs@cygnus.com)

	Mon Sep 14 16:39:10 1992  Chip Salzenberg  (chip@tct.com)

	[ Changes propagated from diffs to c-* in 920911 snapshot. ]

	* cp-decl.c (duplicate_decls): Set DECL_INLINE in newdecl so it
	is copied into olddecl.  Don't set DECL_EXTERNAL in olddecl.
	Preserve DECL_UID and DECL_FRIEND_P of olddecl.

 	* cp-typeck.c (build_binary_op_nodefault): Don't assume that a
	target integer fits in a HOST_WIDE_INT when checking shift widths.

	Mon Sep 14 18:15:42 1992  Mike Stump  (mrs@cygnus.com)

	Mon Aug 24 14:32:03 1992  Chip Salzenberg  (chip@tct.com)

	* cp-parse.y (reserved_declspecs): Warn if storage class occurs here.
	(declmods): Warn if storage class is not first.

	Mon Sep 14 16:59:53 1992  Brendan Kehoe  (brendan@rtl.cygnus.com)

	* cp-method.c (fndecl_as_string): Don't output an extra space when
	printing the return type of a function.

	Mon Sep 14 16:01:53 1992  Mike Stump  (mrs@cygnus.com)

	Fri Jun 12 18:07:00 1992  Niklas Hallqvist  (niklas@appli.se)

	* cp-parse.y (structsp, named_class_head_sans_basetype):  Call
	overload_template_name in the case of template specializations so
	that something like:

	template<class T> struct C { C(); };
	struct C<int> { C(); };

	works.

	Mon Sep 14 15:51:22 1992  Mike Stump  (mrs@cygnus.com)

	Fri Apr 10 13:20:56 1992  Niklas Hallqvist  (niklas@appli.se)

	* cp-spew.c (spew_debug): exported this flag for use in cp-decl.c
	(template_type_seen_before_scope): new global containing contextual
	information for the parser, making the compiler grok nested types in
	template classes.
	(shift_tokens): Guard bcopy calls against moves of zero size.
	(yylex): Handle nested types in template classes.

	* cp-parse.y (scoped_typename): Handle nested types in template
	classes.
	(template_type): Likewise.
	(base_class.1): Likewise.
	(member_init): Likewise.
	(scoped_baseclass): New rule for handling of nested types in
	template classes.

	* cp-decl.c (xref_defn_tag): Conditionalized debug printout on
	spew_debug (defined in cp-spew.c).
	(binding_levels_sane): void function returned value.

	Mon Sep 14 15:41:28 1992  Mike Stump  (mrs@cygnus.com)

	Mon Sep 14 17:26:18 1992  Chip Salzenberg  (chip@tct.com)

	* cp-parse.y (unary_expr), cp-call.c (build_scoped_method_call):
	NEVER use `maybe_adjust' feature in destructors.  It's unsafe.

	Mon Sep 14 15:12:34 1992  Brendan Kehoe  (brendan@rtl.cygnus.com)

	* cp-decl.c (finish_method): Complain when a qualifier is used as
	part of a member declaration.

	Mon Sep 14 11:47:30 1992  Mike Stump  (mrs@cygnus.com)

	* cp-decl2.c (groktypefield):  Revert Wed Aug 19 14:47:08 1992
	change as it breaks template constructor declarations.  Gez, this
	code is horribly complex, and the comments are wrong.  Note,
	template constructor definitions are broken in the same way, as
	declarations were with this patch in.

	Fri Sep 11 14:09:01 1992  Mike Stump  (mrs@cygnus.com)

	Fri Sep 11 10:34:45 PDT 1992  Ron Guilmette  (rfg at netcom.com)

	* cp-decl.c (duplicate_decls):  For file-scope redefinitions, note
	that the variable was previously *defined* at some specific (earlier)
	point.

	Fri Sep 11 13:49:55 1992  Mike Stump  (mrs@cygnus.com)

	Tue Sep  8 21:39:35 PDT 1992  Ron Guilmette  (rfg at netcom.com)

	* cp-decl2.c (finish_file):  Don't pass `1's as the `functionbody'
	flag to `poplevel' when getting ready to finishing up the per-
	compilation-unit constructors and destructors.

	Fri Sep 11 13:28:02 1992  Mike Stump  (mrs@cygnus.com)

	* cp-decl.c (grokdeclarator):  Upgrade local externs with
	initializations to be errors, instead of warnings.

	Fri Sep 11 13:03:52 1992  Mike Stump  (mrs@cygnus.com)

	Thu Sep 10 09:40:56 PDT 1992  Ron Guilmette  (rfg at netcom.com)

	* cp-decl.c (grokdeclarator):  Given an error if *either* a `static'
	or an `extern' specifier is attached to a defining declaration of a
	static data member.

	Wed Sep  9 19:46:43 1992  Mike Stump  (mrs@cygnus.com)

	* c++: Makes sure echo -nostdinc does not eat the -nostdinc.

	Tue Sep  8 13:42:35 1992  Brendan Kehoe  (brendan@rtl.cygnus.com)

	* cp-typeck.c (common_type, case FUNCTION_TYPE): An empty argument
	list is represented as a void_type_node; make sure we check for
	that, and not just an empty TYPE_ARG_TYPES list on either side.

	Tue Sep  8 02:31:05 1992  Mike Stump  (mrs@cygnus.com)

	* cp-tree.c (layout_basetypes, make_binfo):  Added support for
	debugging information about virtual base class pointers.

	Mon Sep  7 15:34:58 1992  Brendan Kehoe  (brendan@rtl.cygnus.com)

	* cp-decl2.c (temp_name_p): Deleted function, never used anywhere.

	Sun Sep  6 23:09:29 1992  John F Carr  (jfc at Athena.MIT.EDU)

	* cp-typeck.c (convert_arguments): Ignore arguments which are
	ERROR_MARK_NODE to avoid crashes trying to reference fields which
	are not present.

	Mon Sep  7 12:34:09 1992  Brendan Kehoe  (brendan@rtl.cygnus.com)

	* cp-decl.c (clear_anon_tags): Do assignment of B after we've seen
	if we're to work on an anonymous aggregate.  No need to make the
	assignment for nearly every aggr we ever declare. 

	Sun Sep  6 17:51:47 1992  Mike Stump  (mrs@cygnus.com)

	Sun Sep  6 13:12:16 1992  John Carr (jfc@Athena.MIT.EDU)

	* cp-decl.c (pushdecl, finish_decl, store_return_init,
	finish_function), cp-decl2.c (constructor_name, finish_file),
	cp-except.c (cplus_expand_reraise), cp-init.c (emit_base_init,
	expand_aggr_init_1), cp-typeck.c (build_modify_expr,
	c_expand_asm_operands, c_expand_return): Include rtl.h and eliminate
	unneeded casts.

	* cp-decl2.c (grokbitfield): Use NULL_TREE instead of NULL.

	* cp-decl2.c (finish_file): Don't try and not use stdio.h.

	* cp-except.c (cplus_expand_reraise): emit_move_insn takes 2
	arguments, not three.

	Sat Sep  5 12:04:06 1992  Brendan Kehoe  (brendan@rtl.cygnus.com)

	* cp-decl.c (finish_function): Undo change of Mon Aug 17 16:28:48
	1992; it resulted in lots of unnecessary and incorrect warnings.

	* cp-lex.c (do_identifier): For nested classes, check if a variable
	being sought is actually in the scope of an enclosing class.  If it
	is, and the variable's non-static, bail.

	* cp-decl.c (grok_enum_decls):  Tighten up some code that was pretty
	twisty.

	* cp-class.c (start_struct): Delete; it was #if 0'd out anyway (C++
	doesn't need it), and is an old hold-over from c-decl.c.

	* cp-class.c (minus_one_node): Delete, it's not used.
	(init_class_processing): Delete init of minus_one_node.

	* cp-spew.c (yylex): Check return of resolve_scope_to_name to
	be NULL_TREE.
	(frob_identifier): Likewise.
	(hack_more_ids): Likewise.

	* cp-cvt.c (convert_to_real): Use REAL_VALUE_ATOF to make 0.

	Fri Sep  4 19:23:17 1992  Mike Stump  (mrs@cygnus.com)

	* cp-decl.c (grok_ctor_properties):  When looking for copy
	constructors, ignore the first argument since it is the in$chrg
	parameter for the object to copy from.

	Fri Sep  4 14:35:31 1992  Mike Stump  (mrs@cygnus.com)

	* cp-cvt.c (build_up_reference):  Prevent the compiler from dumping
	core on semantic errors.

Thu Sep 17 17:28:13 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-typeck.c (initializer_constant_valid_p): Warn about address
	arithmetic destined for a type that's too narrow.
	New argument ENDTYPE.

	* limitx.h: Don't include-next if _LIBC_LIMITS_H_ defined.

Thu Sep 17 20:45:16 1992  Paul Eggert  (eggert@twinsun.com)

	* cexp.y (parse_escape): Diagnose '\x' with no digits.
	Diagnose integer overflow when parsing \x escapes.

Thu Sep 17 11:52:53 1992  Michael Meissner  (meissner@osf.org)

	* gcc.c (SIGNED_CHAR_SPEC): Use #if rather than ?: in default defn.

Thu Sep 17 14:53:51 1992  Tim Moore  (moore@defmacro.cs.utah.edu)

	* pa.h (FUNCTION_ARG_ADVANCE, FUNCTION_ARG): Fix double integer
	argument alignment.
	(SIZE_TYPE, PTRDIFF_TYPE, WCHAR_TYPE, WCHAR_SIZE): Define.
	* pa-hpux.h, pa-ghpux.h (SIZE_TYPE, PTRDIFF_TYPE, WCHAR_TYPE,
	WCHAR_SIZE): Define for hpux.
	* x-pa, t-pa : New files.
	* configure (hppa cases): add definitions for xmake_file and
	tmake_file.

Wed Sep 16 22:22:15 1992  James Van Artsdalen  (james at bigtex.cactus.org)

	* i386.c (print_operand): Don't abort if error: might have been a
	user asm.

	* i386.md (addsi3,ashlsi3): Handle the case where the stack
	pointer appears as an index reg.

Wed Sep 16 21:22:23 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* cse.c (fold_rtx): For SUBREG, actually test subreg_lowpart_p in the
	code to handle narrowing subregs.  And exclude binary ops like DIV
	where truncating the args is not valid.

	* libgcc2.c (__CTOR_LIST__, __DTOR_LIST__): Moved to separate member.
	* Makefile.in (LIB2FUNCS): Added _ctors.

Wed Sep 16 23:28:41 1992  Paul Eggert  (eggert@twinsun.com)

	* cexp.y (parse_number): Warn about '9' in octal constants.
	Commonize overflow detection for various radices.

Wed Sep 16 19:33:37 1992  Torbjorn Granlund  (tege@mole.gnu.ai.mit.edu)

	* pa.md (casesi): Use emit_jump_insn to emit casesi0 pattern.
	(xorsi3): Remove `r' from output template.
	(movstrsi recognizer): Add `+' to operand 0 & 1 constraints.

Wed Sep 16 14:53:51 1992  Michael Meissner  (meissner@osf.org)

	* mips.h (MIPS_VERSION): Set Meissner version # to 25.

	* mips.c (gen_int_relational): Eliminate all vestiages of
	figuring out whether the comparison will always be true or false.
	Let the optimizer figure it out.
	(gen_conditional_branch): Ditto.
	(function_epilogue): Print correct number of half-pic pointers
	and references.
	(prev_half_pic_refs): New static variable.
	(prev_half_pic_ptrs): New static variable.

Tue Sep 15 16:10:47 PDT 1992  Ron Guilmette  (rfg at netcom.com)

	* toplev.c (rest_of_decl_compilation):  Call `dwarfout_file_scope_decl'
	immediately for actual *definitions* of file-scope variables (and
	file-scope typedefs too).

Tue Sep 15 20:56:31 1992  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* fixincludes (EXINIT): Clear it to avoid problems with bad values.
	* fixinc.svr4 (EXINIT): Likewise.	

	* print-tree.c (print_node): Don't print blank line for null
	fields in a TREE_VEC.

	* cccp.c (macroexpand): Don't output another error message if have
	already output error message returned from macarg.

	* c-decl.c (grokparms): Copy parm list if it isn't permanent,
	instead of copying it if temporary allocation has been turned off.

	* final.c (only_leaf_regs_used): Check for global_regs.

	* c-parse.y (typespec): Don't warn if pedantic when typeof used.

	* c-tree.h (lang_identifier): Add limbo_value field for out of
	scope block level extern declarations.
	(IDENTIFIER_LIMBO_VALUE): New define, to access that field.	
	* c-decl.c (print_lang_identifier): Print value of limbo field.
	(pushdecl): Check an extern decl against both previous global and
	previous limbo declarations.  For global declarations, clear limbo
	value field.  For block level extern declarations, set limbo field
	if zero.
	(grokdeclarator): If this is a block level extern, then allocate
	it on the permanent obstack, not the temporary obstack.

Tue Sep 15 15:42:24 1992  Paul Eggert  (eggert@twinsun.com)

	* tree.c (int_fits_type_p): Negative ints never fit unsigned
	types, and unsigned ints with top-bit-set never fit signed types.
	* c-lex.c (yylex): Integer constant is unsigned for purposes of
	int_fits_type_p so that it compares huge constants properly.

Tue Sep 15 14:44:51 1992  Michael Meissner  (meissner@osf.org)

	* i386.md (string move, string compare): Always issue cld
	instruction before doing a rep string move, so that we are
	guaranteed that the bytes are moved/compared correctly.

Tue Sep 15 00:09:06 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* gstdarg.h: (va_arg): Cast ptr to void *, then to TYPE *.
	* va-i960.h, va-m88k.h, va-mips.h, va-pa.h, va-pyr.h, va-sparc.h:
	Likewise.

	* rtl.c (ftell): Declaration deleted.

Mon Sep 14 15:17:09 1992  Michael Meissner  (meissner@osf.org)

	* configure (arg processing): Add --with-stabs switch.
	(all mips configurations, except decrose): If --with-stabs, use
	the configuration file that emits stabs as the debug debug
	configuration, rather than the native MIPS ECOFF format.

Mon Sep 14 13:28:29 1992  Torbjorn Granlund  (tege@jupiter.sics.se)

	* configure (option case statement): Index with `$next_arg' instead
	of `next_arg'.  Clean up order and indentation for switches.
	(several places): Remove space around assignment `='.
	(usage printing): Don't use `-n' for echo (SysV lossage).
	Print config.status with `tail +2'.

Mon Sep 14 23:46:19 1992 Paul Eggert (eggert@twinsun.com)

	* c-lex.c (yylex): Warn about integers so large that they are unsigned.

	* cexp.y (parse_number): Diagnose integer constants that are too large.
	Diagnose duplicate `l' and `u' suffixes.  Diagnose ` 0x ' and ` 0a '.
	Warn about integer constants that are so large that they are unsigned.

Mon Sep 14 10:26:34 1992  Charles Hannum  (mycroft@hal.gnu.ai.mit.edu)

	* reload1.c (init_reload): Fix typo in last change.

Mon Sep 14 01:17:58 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* reload1.c (init_reload): For reg+reg+const, try various regs.

Sun Sep 13 01:08:06 1992  Paul Eggert  (eggert@twinsun.com)

	* cexp.y (exp): Detect signed integer overflow.
	Replace `(unsigned)' with `(unsigned long)'.  When
	evaluating << and >>, compute the correct answer without shifting
	by more than HOST_BITS_PER_LONG, or by a negative quantity.
	(integer_overflow, left_shift, right_shift): New functions.

Sun Sep 13 02:00:52 1992  Torbjorn Granlund  (tege@jupiter.sics.se)

	* arm.md: Clean up indentation.

	* pa.c (output_load_address): Removed.  Nothing uses it.
	* pa.md (high:DI recognizer): Add return \"\".
	* pa.md (sCC, bCC expanders): Remove constraints.
	* pa.md (and-with-immediate optimizer): New pattern.
	* pa.md (ior-with-immediate optimizer): New pattern.
	* pa.c (consec_zeros_p, and_operand, ior_mask_p, ior_operand,
	output_and, output_ior): New functions.
	* pa.h (output_and, output_ior): Declare.
	* pa.h (CONST_OK_FOR_LETTER_P): Add 'O' and 'P'.
	* pa.c (compute_xdepi_operands_from_integer): New function.
	Some code come from output_zdepi.
	(output_zdepi): Removed.
	(depi_cint_operand): New name for zdepi_operand.
	* pa.md (adddi3): Extend to handle CONST_INT.
	* pa.md (movstrsi): Change `!= 4' => `< 4' in test for alignment.
	* pa.md (negsi2): Don't use @ for just one output template.
	* pa.md (and-not patterns): Make them canonical.  Put operands in
	the right order.
	* pa.md (casesi): Rewrite.  Used to be buggy and slow.
	* pa.md (several patterns): Make sure # of attribute alternatives
	match # of constraint alternatives.
	Return assembler output template instead of calling output_asm_insn.
	Don't write to operands[n] for n >= max operand number in the
	pattern, use xoperands instead.

Sat Sep 12 15:06:57 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* regclass.c (record_reg_classes):
	Ignore leading % when examining constraint.
	Don't bypass usual cost computation when a pseudo "matches"
	a non-pseudo in matching operands.

	* c-lex.c (yylex): If integer value overflows so highword is negative, 
	it needs unsigned long long.

Fri Sep 11 21:09:53 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* sys-types.h (va_alist): Supply `int' as the type to define it as.

Fri Sep 11 12:39:39 1992  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.md	(non-[cf]branch define_delay): Use a single delay description
	for the delay slots in "branch", "call", and "milli" insns.
	(fbranch define_delay): fbranches have a single delay slot which
	may be nullified when the branch is taken (regardless of direction
	or distance to the target.)
	(in_branch_delay attribute): Disallow fbranch insns explicitly. 
	(floating point branches): Use "fbranch" attribute for these insns.
	Update output template to properly handle nullification.

Fri Sep 11 10:34:45 PDT 1992  Ron Guilmette  (rfg at netcom.com)

	* c-decl.c (duplicate_decls):  For file-scope redefinitions,
	error message distinguishes previous definitions from mere decls.

Fri Sep 11 01:07:11 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-convert.c (convert_to_integer): Don't pass truncation thru lshift
	if shift count >= width of narrower type.  Instead, just use 0.

	* we32k.h (SIZE_TYPE): Defined.

Fri Sep 11 00:03:45 1992  Paul Eggert  (eggert@twinsun.com)

	* c-decl.c (finish_struct): Don't assume that a target integer
	fits in a HOST_WIDE_INT when checking bit-field widths.
	* c-typeck.c (build_binary_op): Likewise, when checking shift widths.

Thu Sep 10 22:23:10 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* optabs.c (expand_binop):
	Convert op1 of shift libcall to word_mode.

Thu Sep 10 18:14:36 1992  Tim Moore  (moore@defmacro.cs.utah.edu)

	* final.c (shorten_branches): Do shorten branches with delay slots
	if the number of delay slots is constant.
	* genattrtab.c (write_const_num_delay_slots): New function;
	creates const_num_delay_slots ().
	(main): Call it.
	* genattr.c (main): Write declaration for const_num_delay_slots ().

Thu Sep 10 17:33:42 1992  Michael Meissner  (meissner@osf.org)

	* mips.md (all move patterns): Do not allow memory to memory or
	non-zero constant to memory moves to be generated, which causes
	reload to generate the load/store using spilled registers, and
	does not allow for efficient CSE or scheduling to be done.

	* dec-gosf1.h, iris4g.h: New files.

Thu Sep 10 12:46:17 1992  Torbjorn Granlund  (tege@jupiter.sics.se)

	* pa.md (casesi): Add `&' to constraint for clobber operand.

	* optabs.c (expand_binop): Fix typo, `mode' => `methods'.

Thu Sep 10 00:21:05 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* optabs.c (expand_binop): Delete #ifdef GPC; complex code now uncond.

	* optabs.c (init_fixtab): Fix typo for fix_truncdfqi2.

Wed Sep  9 13:25:53 PDT 1992  Ron Guilmette  (rfg at netcom.com)

	* c-common.c (declare_function_name):  Allow for anonymous function.

Wed Sep  9 15:56:09 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Makefile.in (mostlyclean): Delete xlimits.h.

	* final.c (output_addr_const):
	If 2nd arg of MINUS is negative integer, put it in parens.

Wed Sep  9 10:10:30 1992  Michael Meissner  (meissner@osf.org)

	* va-mips.h (va_arg): Handle structures larger than 8 bytes.
	(all macros): Put __ in front of all macro arguments.

Wed Sep  9 00:45:02 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* sol2-crt1.asm (.nope): Really store into environ.

	* libgcc2.c (__gcc_bcmp): New function, in cond on L__gcc_bcmp.
	* Makefile.in (LIB2FUNCS): Add L__gcc_bcmp.

	* expr.c (expand_expr): Support IN_EXPR.

Tue Sep  8 20:04:43 1992  Paul Eggert  (eggert@twinsun.com)

	* c-convert.c (convert_to_integer): When optimizing LSHIFT_EXPR	and
	RSHIFT_EXPR, do compares at tree level.

	* tree.c (build_index_type, build_index_2_type): Don't pass
	HOST_WIDE_INT to routine expecting an int.  Don't pass negative
	value even if hash code is INT_MIN.

Tue Sep  8 17:35:51 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* dbxout.c (dbxout_type_fields): Handle nameless subrecords for Pascal.
	(dbxout_type): Handle CHAR_TYPE, BOOLEAN_TYPE. FILE_TYPE, SET_TYPE.

	* news.h (ASM_OUTPUT_OPCODE): Deleted.

	* c-parse.y (stmt): In for stmt, put proper lineno before increment.
	Don't call position_after_white_space.

Tue Sep  8 06:31:17 1992  Michael Meissner  (meissner@osf.org)

	* cp-typeck.c (constant_print_warning): Deleted.

Tue Sep  8 05:26:19 1992  Mike Stump  (mrs@hal)

	Tue Aug 18 23:56:16 1992  Ron Guilmette  (rfg at netcom.com)

	* tree.h (BINFO_VPTR_FIELD):  Added to support debugging
	information about virtual base class pointers.

Mon Sep  7 19:39:45 1992  Brendan Kehoe  (brendan@cygnus.com)

	* c-typeck.c (constant_print_warning): Deleted.
	* c-common.c: Moved here.

Mon Sep  7 17:03:07 1992  Paul Eggert (eggert@twinsun.com)

	* fold-const.c (fold): Check abs for constant integer overflow.

Mon Sep  7 01:31:42 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-common.c (check_case_value): Call constant_expression_warning.

	* cse.c (simplify_binary_operation): For DIV by 0, do nothing.

	* c-decl.c (duplicate_decls): Set DECL_INLINE in newdecl
	so it is copied into olddecl.

Sun Sep  6 08:53:46 1992  Fred Fish  (fnf at fishpond)

	* m68k.md (fsglmul pattern): If FSGLMUL_USE_S, opcode has .s, not .x.
	* amix.h (FSGLMUL_USE_S): Defined.

Sun Sep  6 17:42:33 1992  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.md (indirect_jump): Annul the next instruction if the delay
	slot could not be filled instead of emitting a nop.

	* pa.c (output_function_prologue): Undo Aug. 13 change.
	If profiling, then this function makes calls.  Reflect this in
	CALLINFO.
	(output_function_epilogue): If profiling, then be restore "rp" here.

	* pa.md (use_milli_regs attribute): Deleted, not necessary anymore.
	All references deleted.
	* pa.c (use_milli_regs): Deleted.

Sun Sep  6 17:11:00 1992  Torbjorn Granlund  (tege@jupiter.sics.se)

	* arm.h (MOVE_MAX): Define as 4.

	* ns32k.c (hard_regno_mode_ok): Don't abort if unknown mode,
	return 0 instead.  Declare argument MODE as `enum machine_mode'.

	* i860.h (HARD_REGNO_MODE_OK): Allow BLKmode.

Sun Sep  6 16:57:12 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* expr.c (init_expr_once): Don't try HARD_REGNO_MODE_OK on VOIDmode
	or BLKmode.

Sun Sep  6 14:27:57 1992  Michael Meissner  (meissner@osf.org)

	* cp-typeck.c (constant_expression_warning): New fn from c-typeck.c.

Sun Sep  6 09:11:46 PDT 1992  Ron Guilmette  (rfg at netcom.com)

	* c-decl.c (duplicate_decls): Don't set DECL_EXTERNAL in olddecl.
	Preserve DECL_UID of olddecl.

Sun Sep  6 03:37:21 1992  James Van Artsdalen  (james at bigtex.cactus.org)

	* i386.md (cmpstrsi): Rewrite expander to handle operands correctly.

Sat Sep  5 22:55:53 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c (try_combine): Make change missing from last modification
	to splitting code.

Sat Sep  5 19:21:03 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* stor-layout.c (layout_type): Caller must give size of FILE_TYPE.

Sat Sep  5 16:34:50 1992  Torbjorn Granlund  (tege@jupiter.sics.se)

	* arm.c (before functions): Remove xmalloc decl.
	(arm_asm_output_label): Cast value from xmalloc.

	* arm.md (storehi): Use match_operand for operand 0.
	Use gen_lowpart to change mode of operand 0.
	(storeinthi): Use match_operand for operand 0.
	Change output code to reassign operand 0.
	(truncsihi2, truncsiqi2, trunchiqi2): Remove these patterns.

Sat Sep  5 02:39:37 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* news.h (ASM_OUTPUT_OPCODE): Defined.

Sat Sep  5 18:52:21 1992  Jukka Virtanen  (jtv@kampi.hut.fi)

	* stor-layout.c (layout_type): Handle BOOLEAN_TYPE, CHAR_TYPE,
	and FILE_TYPE for Pascal. 
	(fixup_signed_type): New function.

	* optabs.c (init_optabs): Use __gcc_bcmp, not real bcmp.
	(expand_unop): Handle NEG for complex modes.
	(expand_binop): Likewise.
	(expand_complex_binop): New function.

	* expr.c (emit_move_insn): When moving word by word,
	mark the whole thing as a libcall block.
	(group_insns): New function.
	(expand_expr):
	Implement COMPLEX_EXPR, REALPART_EXPR, IMAGPART_EXPR, CONJ_EXPR.

	* print-tree.c (print_node): Handle BOOLEAN_TYPE and CHAR_TYPE.
	* emit-rtl.c (gen_highpart): New function.

Fri Sep  4 23:20:59 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* i860.md (mulsi3_big): Use low half of result.
	Use offset 1 in subregs in actual fmlow insn.
	(fmlow pattern): Split this into alternatives for big and little end.

	* regclass.c (record_reg_class): For matching operands, handle
	case where the earlier one is not a pseudo like the case
	where the later one is not a pseudo.

Fri Sep  4 17:24:11 1992  Torbjorn Granlund  (tege@jupiter.sics.se)

	* pa.c (output_move_double): Use %R to store at auto-incr/decr
	addr.  Split incr and decr cases for store.

Fri Sep  4 03:49:05 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* gcc.c (main): No program should return the error_count!
	Return 2 if failure due to signal, 1 if just errors.
	(execute): Increment signal_count.

	* move-if-change: Undo previous change.

	* c-decl.c (grokparms): Copy arg type list to savable obstack if nec.

Fri Sep  4 19:40:32 1992  Paul Eggert  (eggert@twinsun.com)

	* c-typeck.c (constant_expression_warning): Now works;
	it reports signed integer overflow in constant expressions,

	* fold-const.c (left_shift_overflows, same_sign, overflow_sum_sign):
	New macros.
	(add_double, div_and_round_double, lshift_double, mul_double,
	neg_double, const_binop, fold): Check for signed integer overflow.
	Propagate overflow flags from operands to result.
	(const_binop, fold_convert): Use pedwarn for overflow warnings.
	Say `constant expression', not `constant folding', for user's sake.

Thu Sep  3 22:28:41 1992  Brendan Kehoe  (brendan@mole.gnu.ai.mit.edu)

	Complete 12th Cygnus<-->FSF merge.

	Thu Sep  3 12:29:24 1992  Brendan Kehoe  (brendan@cygnus.com)

	These changes are propagated from changes to c-*.c.

	Mon Aug 17 16:28:48 1992  Chip Salzenberg  (chip@tct.com)

	* cp-decl.c (finish_function): Test only can_reach_end for the
	warning about reaching the end of a non-void function.
	(grokdeclarator): When promoting an argument, retain unsignedness
	if traditional or if promoted type is not really getting wider.

	* cp-parse.y (datadef): For empty declaration, use pedwarn.

	Mon Aug 17 17:08:11 1992  Chip Salzenberg  (chip@tct.com)

	* cp-cvt.c (convert): When converting to variant of same type, fold.

	Wed Aug 19 16:58:41 1992  Chip Salzenberg  (chip@tct.com)

	* cp-typeck.c (default_conversion): Convert enumeral types to
	appropriate _signed_ type unless -traditional.

	Tue Aug  4 13:11:36 1992  Chip Salzenberg  (chip@tct.com)

	* cp-cvt.c (convert): If main variants match, 
	but the type is not identical, make a NOP_EXPR.

	* cp-decl.c (warn_redundant_decls): Declared.
	(duplicate_decls): Optionally warn about redundant declations.
	(pushdecl): Never reuse global fcn decl in place of local extern;
	just copy some info from it.
	(init_decl_processing): __builtin_saveregs returns void *.
	(store_parm_decls, finish_function, start_method, finish_method):
	Compare TYPE_MAIN_VARIANT against void_type_node.

	* cp-decl2.c (warn_redundant_decls): Defined.
	(lang_decode_option): Decode -Wredundant-decls.

	* cp-typeck.c (build_conditional_expr): Don't use type1 as
	temporary variable; set result_type directly.

	Tue Aug  4 12:04:17 1992  Chip Salzenberg  (chip@tct.com)

	* cp-tree.h (C_PROMOTING_INTEGER_TYPE_P):  Defined.
	* cp-class.c (finish_struct):  Use it.
	* cp-decl.c (duplicate_decls, grokdeclarator):  Ditto.
	(grokparms, start_function):  Ditto.
	* cp-typeck.c (self_promoting_args_p, default_conversion):  Ditto.
	* cp-parse.y (primary): Set TREE_CONSTANT in the NOP_EXPR for an enum.

	Tue Aug  4 09:17:32 1992  Chip Salzenberg  (chip@tct.com)

	* cp-decl.c (duplicate_decls, grokdeclarator, grokparms): 
	Use TYPE_MAIN_VARIANT when comparing against specific types.
	(build_enumerator): Use STRIP_TYPE_NOPS.
	(start_function): Force main() to return "int", not just any
	integral type.

	* cp-typeck.c (self_promoting_args_p, default_conversion): 
	Use TYPE_MAIN_VARIANT when comparing against specific types.
	(unsigned_type, signed_type): If type is not known, return it
	unchanged instead of returning its TYPE_MAIN_VARIANT.
	(build_binary_op_nodefault): Use TYPE_MAIN_VARIANT when
	comparing against specific types.  Also use STRIP_TYPE_NOPS.
	Also copy error messages from equivalent code in c-typeck.c.

	* cp-parse.y (primary): Wrap a NOP_EXPR around an enum value.

	Wed Sep  2 18:06:47 1992  Mike Stump  (mrs@cygnus.com)

	Wed Sep  2 17:33:59 1992  Chip Salzenberg  (chip@tct.com)

	* cp-decl.c (grokdeclarator):  Default friends to being PUBLIC.

	Tue Sep  1 12:33:01 PDT 1992  Ron Guilmette  (rfg at netcom.com)

	* cp-init.c (do_friends):  Always return `void_type_node'.

	* cp-decl.c (grokparms): Call digest_init on default arguments for
	formal parameters.

	* cp-decl.c (xref_tag): The BINFO records describing individual
	inheritances aren't shared in the lattice.

	Tue Sep  1 12:27:17 1992  Mike Stump  (mrs@cygnus.com)

	* cp-call.c (convert_harshness, compute_conversion_costs):  The
	READONLY flag for a const object could be down in the type of the
	reference.

	* cp-call.c (compute_conversion_costs):  Don't ignore the cost of
	converting the first argument, if it is not a method.  Fixes Mon Aug
	31 22:32:34 change.

	Tue Sep  1 11:58:52 1992  Mike Stump  (mrs@cygnus.com)

	* cp-tree.h (THIS_NAME):  Use the name ``this'' instead of the more
	cryptic name ``$t''.

	Mon Aug 31 22:32:34 1992  Mike Stump  (mrs@rtl.cygnus.com)

	* cp-init.c (build_member_call):  When forming method calls that use
	a qualified name, convert the instance pointer to the type implied
	by the qualification.  Base::member_func(); converts this to be a
	(Base *).

	* cp-call.c (compute_conversion_costs):  Don't penalize conversion
	of the instance pointer on method calls, as they could be pointers
	to base classes.

	Mon Aug 31 18:34:33 1992  Brendan Kehoe  (brendan@rtl.cygnus.com)

	* cp-decl.c (start_function): When a friend function is being
	defined, put it in (lexical) scope of the class in which it appears.

	Mon Aug 31 09:57:27 1992  Brendan Kehoe  (brendan@rtl.cygnus.com)

	* cp-typeck.c (build_modify_expr): For assignments to member
	variables like "X::i", call resolve_offset_ref to get the lhs; all
	the code and checking was in there, it just wasn't being used.

	* cp-class.c (finish_struct_methods): Give the name of the class
	in question when reporting that all its member functions are
	private.

	Sun Aug 30 08:34:03 1992  Mike Stump  (mrs@rtl.cygnus.com)

	* cp-decl2.c (setup_vtbl_ptr): Disable the code, until problems can
	be worked around.

	Sat Aug 29 10:34:10 1992  Mike Stump  (mrs@rtl.cygnus.com)

	* cp-init.c (emit_base_init): Undo Sat Jan 18 12:06:58 change by
	tiemann that incorrectly makes -pedantic initialization of virtual
	base classes 1 or more levels deep impossible.

	Sat Aug 29 10:03:07 1992  Mike Stump  (mrs@rtl.cygnus.com)

	* cp-class.c (finish_struct): Allow extern "C" functions to be
	friends.

	Sat Aug 29 04:43:22 1992  Mike Stump  (mrs@rtl.cygnus.com)

	* cp-parse.y (used_extern_spec), cp-decl.c (start_decl,
	start_function): Make sure extern in extern "C" (fndef | datadef)
	applies to only one decl. Fixes problem introduced on Thu Aug 20
	16:11:58.

	Thu Aug 27 09:33:13 1992  Brendan Kehoe  (brendan@cygnus.com)

	* cp-decl.c (grokdeclarator): Name operators properly when
	complaining about trying to declare it as a method when not in a
	class.

	* cp-decl.c (grok_reference_init): Forbid volatile->const refs,
	and vice-versa.  Also make the tests apply to all types, not just
	aggregates.  (Now fully compliant with ANSI C++ June 5 1996 WP
	section 8.4.3.5.)

	* cp-decl.c (shadow_tag): Don't allow a function to be a member of
	an anonymous union.

	* cp-class.c (finish_struct): For a type that's nested within a
	class, use the class value itself when checking a typedef that uses
	that new nested type.

	Wed Aug 26 20:24:07 1992  Brendan Kehoe  (brendan@cygnus.com)

	* cp-decl.c (decls_match): When converting from a
	pseudo-METHOD_TYPE for a static member fn, handle the static
	function being both in the new and old declarations.
	(revert_static_member_fn): New function.

	* cp-call.c (build_method_call): Put out proper line number for
	error with the use of a private constructor.

	* cp-decl.c (grokdeclarator): If a storage class is erroneously
	specified for an operator, print the operator's name out properly in
	the error message (e.g., print `+' instead of `__pl').

	* cp-decl.c (grokdeclarator): Allow neither constructors nor
	destructors to be declared const or volatile.

	* cp-decl.c (grok_op_properties): New argument VIRTUALP.
	Use it to disallow declaring new or delete as virtual.  Also
	use coerce_new_type() and coerce_delete_type() to
	sanity-check overloading of new and delete.
	(grokfndecl): Give grok_op_properties if the decl is virtual.
	(start_method): Likewise.

	* cp-tree.c (lvalue_p, ADDR_EXPR case): Casts to references are
	lvalues.

Thu Sep  3 02:46:44 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* caller-save.c (setup_save_areas): Don't look at WORDS_BIG_ENDIAN.

	* fixincludes: If we find a link pointing to ., make a similar
	link to ., not a link to an absolute name.
	(stdio.h): Change stdio.h to use stdarg.h to get va_list.

	* cexp.y: Comment syntax fix.

Thu Sep  3 01:48:16 1992  Torbjorn Granlund  (tege@jupiter.sics.se)

	* we32k.md (casesi): Use match_dup for second mention of operand 4.

Wed Sep  2 06:58:32 1992  Michael Meissner  (meissner@osf.org)

	* gcc.c (default_compilers): Add missing comma between strings, so
	that traditional compilers can compile gcc.c.
	(main): Don't pass strcpy or strlen a NULL pointer if some of the
	spec strings in default_compilers are NULL.
	(validate_all_switches): Don't dereference a NULL pointer if some of
	the spec strings in defalut_compilers are NULL.

	* gcc.c (main): Use new loop var J to avoid conflict with I.

Wed Sep  2 19:09:02 1992  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* caller-save.c (init_caller_save): If we were unable to
	find a simple insn which meets all its constraints to save
	and restore with a single insn in a mode, then set 
	regno_save_mode to VOIDmode to insure that this mode is never
	used to caller-save the	current register.

Wed Sep  2 12:34:39 1992  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* caller-save.c (insert_save_restore): Correct test for
	determining whether multiple registers can be saved.

	* sparc.md (SImode ldd peepholes): Add `f' to constraints.

	* sparcv4.h (HANDLE_PRAGMA): Delete.
	* sparc.c (handle_pragma_token): Delete.

	* config/spc-sol2.h: Change the location of the Sun bundled C 
	compiler in MD_STARTFILE_PREFIX (for backup defaults).

Wed Sep  2 09:11:16 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* m88k.h (MOVE_MAX): Express in bytes not bits.

	* m88k.c (output_ascii): Output known escape characters and don't
	terminate the constant if an octal escape is used.

Wed Sep  2 06:38:37 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c (make_compound_operation, case ASHIFTRT): Add new
	code to handle (ashiftrt (neg (ashift FOO C1) C2)) just like we
	currently handle (ashiftrt (OP (ashiftrt FOO C1) C2) C2).

Wed Sep  2 00:15:42 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Makefile.in (install): Add semicolon to make an empty command.

	* reload.c (find_reloads): If have any earlyclobbers, don't let any
	reloads overlap with them.  Make everything RELOAD_OTHER.

	* move-if-change: Give status 1 if file is unchanged.

	* Makefile.in (SYSTEM_HEADER_DIR): New variable.
	(xlimits.h): New target, broken out from install-limits-h.
	Look in SYSTEM_HEADER_DIR for system's limits.h.
	(start.encap): Dep on xlimits.h.
	(install-limits-h): Install xlimits.h already made.
	* cross-make (SYSTEM_HEADER_DIR): Overridden.

	* x-i386sco (X_CFLAGS): Deleted.
	* x-i386sco4: New file, like old x-i386sco.
	* configure (i386-*-sco3.2v4*): Use x-i386sco4.

	* t-sol2 (gmon.o): Find gmon-sol2.c in config.

	* c-typeck.c (process_init_constructor): Fix bugs in previous change.

Tue Sep  1 23:51:19 1992  Brendan Kehoe  (brendan@rtl.cygnus.com)

	* gcc.c (default_compilers, ".C" and ".ii"): Pass `+e*' into cc1plus.
	(process_command): Allow +e[012] to be passed down into cc1plus.
	* cp-decl.c (lang_decode_option): The options `+e0' thru `+e2' will
	be coming in prefixed as `-+e'.

Tue Sep  1 20:09:29 1992  Paul Eggert  (eggert@twinsun.com)

	* print-tree.c (print_node): Avoid 1 << (HOST_BITS_PER_INT - 1),
	which overflows.  Use unsigned % to compute HASH.

Tue Sep  1 17:23:28 1992  Tim Moore  (moore@hal)

	* pa.h (CPP_SPEC, TARGET_SWITCHES): new flags: -mnosnake,
	-mpa-risc-1-0, -mpa-risc-1-1.
	(ASM_DECLARE_FUNCTION_NAME): Emit argument descriptors for all
	general registers if current_function_varargs.

Tue Sep  1 11:27:08 1992  Brendan Kehoe  (brendan@rtl.cygnus.com)

	* sparc.c (handle_pragma_token): Only use if HANDLE_SYSV_PRAGMA
	isn't defined.  (We'll be getting the fn from c-pragma.c, then.)

Sat Aug 29 13:44:21 PDT 1992  Ron Guilmette  (rfg at netcom.com)

	* tree.h (current_block):  Decl deleted.
	(set_block):  Declared.
	* stmt.c (expand_fixup):  Create a BLOCK node (via pushlevel/poplevel)
	to represent an artificial scope containing all of the fixup code.
	Also emit NOTE_INSN_BLOCK_BEG/NOTE_INSN_BLOCK_END for that block.
	(fixup_gotos):  Declaration of NEWBLOCK deleted.
	Call `set_block' to use the BLOCK made in expand_fixup.
	Deleted code to insert NEWBLOCK into block hierarchy.
	* c-decl.c, cp-decl.c (current_block):  Function deleted.
	(set_block):  New function.
	(poplevel): If using a previously created block,
	don't insert it into the parent level.
	* emit-rtl.c (emit_insns_after): Update last_insn if nec.

Tue Sep  1 10:53:58 1992  Torbjorn Granlund  (tege@jupiter.sics.se)

	* pa.c (output_move_double): Use `ldo' for immediate adds (instead
	of `addi' with bad syntax).
	(output_load_address): Likewise.

Tue Sep  1 02:41:13 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* tree.h (struct tree_type): Make `align' field an int.

	* c-tree.h (IDENTIFIER_LIMBO_VALUE): New macro.
	(struct lang_identifier): New field limbo_value.

Mon Aug 31 12:59:22 PDT 1992  Ron Guilmette  (rfg at netcom.com)

	* tree.c (make_node): Fix typo in July 6 change:
	assignment of DECL_IN_SYSTEM_HEADER was inserted in bad place.

Mon Aug 31 21:28:08 1992  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* sched.c (sched_analyze_2): Remove an explicit dependence between
	an insn that uses CC0 and the immediately previous insn
	(SCHED_GROUP_P represents the dependence).
	(schedule_block): Only check sets_cc0_p on an insn.

Mon Aug 31 15:32:13 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* gcc.c (struct compiler): spec field is now array of 4 elements.
	(read_specs): Clear the entire new element of compilers.
	(lookup_compiler): Copy all of spec array.  Check element 0 for @.
	(main): Concatenate all elements of compiler spec.
	(validate_all_switches): Validate from all elements of compiler spec.
	(default_compilers): Split CPP commands into separate strings.

Mon Aug 31 10:06:16 1992  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* caller-save.c (restore_referenced_regs): When restoring a
	referenced hard register, use CEIL instead of a truncating divide
	to determine the maximum number of registers to restore.
	(insert_save_restore): Document maxrestore parameter.
	(CEIL): Define.

Mon Aug 31 04:02:21 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* fold-const.c (const_binop): Delete special case for mult by 3.

	* toplev.c (lang_options): Add terminating zero.

	* configure.bat: Remove version number from initial message.

Sun Aug 30 17:22:11 1992  James Van Artsdalen  (james at bigtex.cactus.org)

	* cccp.c (do_pragma): In prev. change, really use U_CHAR *, not char *.

	* aix386.h, i386gas.h, i386sun.h, i386v.h, i386v4.h, i386vgas.h,
	seq386.h  (TARGET_DEFAULT,VALUE_REGNO,FUNCTION_VALUE_REGNO):
	Move from here,
	* unx386.h (TARGET_DEFAULT,VALUE_REGNO,FUNCTION_VALUE_REGNO):
	To here.
	(TARGET_DEFAULT): Make TARGET_IEEE_FP default on.
	(VALUE_REGNO): Test for MODE_FLOAT instead of specific modes.
	(VALUE_REGNO,FUNCTION_VALUE_REGNO): MODE_FLOAT return reg depends on
	TARGET_FLOAT_RETURNS_IN_80387.

	* i386.h (TARGET_FLOAT_RETURNS_IN_80387): New macro.
	(TARGET_SWITCHES): Add "no-80387", "no-soft-float",
	"fp-ret-in-387", and "no-fp-ret-in-387".
	Change no* switches to no-*.
	(CONDITIONAL_REGISTER_USAGE): Make 387 regs fixed if the 387 is not
	used at all.
	(REG_CLASS_FROM_LETTER): Constraint letters 'f', 't' and 'u' are
	NO_REGS if the 387 is not used.
	(TRAMPOLINE_TEMPLATE): Use GEN_INT to generate const_int rtx.

	* x-i386v4: New file.
	(CLIB): Get alloca from libucb.a.
	* configure (i386-*-sysv4*): Use x-i386v4.

Sun Aug 30 15:32:54 1992  Dennis Glatting  (dglattin at trirex.com)

	* objc-actions.c (create_builtin_decl): Set TREE_STATIC.
	Don't set DECL_EXTERNAL or TREE_PUBLIC.

Sun Aug 30 03:08:48 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-parse.y (initlist): Handle ranges of array elements.
	* c-typeck.c (process_init_constructor): Handle ranges.

	* fixincludes: When link points to a dir $dirname outside $INPUT,
	copy that dir into $LIB/root$dirname.  Translate the link itself
	into a link to that new dir.  Make a file DONE in each treetop dir
	so no treetop is scanned twice.  Improve progress messages.

Sat Aug 29 22:41:49 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* alpha.h (ASM_FILE_START): Object file version number now 8.0.

	* alpha.h (ADJUST_COST): New macro.
	* alpha.c (alpha_adjust_cost): New function.
	* alpha.md: Adjust function unit delays and more precisely
	describe function units.
	
	* alpha.h (CONST_OK_FOR_LETTER_P): Add new letters `O' and `P'.
	* alpha.c (print_operand, case 'P'): New case.
	* alpha.md (ashldi3): Special-case shifts by 1, 2, and 3 bits to
	use arithmetic instructions.
	Add pattern for sign-extending shifts by 1, 2, and 3 bits.

	* alpha.h (INITIALIZE_TRAMPOLINE): Use Pmode when appropriate.
	(FUNCTION_MODE): Use Pmode.

	* alpha.md (div/mod): Indicate that reg 27 is clobbered too.

	* alpha.md (cmov): Add define_split for if_then_else/plus case.

	* expr.c (emit_library_call): Pass correct number of args to
	convert_to_mode.

	* expr.c (emit_block_move): Eliminate unnecessary test against
	HOST_BITS_PER_WIDE_INT.

	* optabs.c (expand_{binop,unop}): Don't make invalid
	paradoxical SUBREGs.

	* genattrtab.c (RTL_HASH, attr_rtx): Avoid warnings by casting
	pointers to HOST_WIDE_INT instead of int.


Sat Aug 29 15:35:58 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* toplev.c (lang_options): New table.
	(main): Recognize all language-dependent options of any language
	and always treat them as language-specific and valid.

	* c-decl.c (c_decode_option): -fnotraditional really undoes
	-ftraditional.  Handle -fno-traditional also.

Sat Aug 29 00:34:01 1992  James Van Artsdalen  (james at bigtex.cactus.org)

	* reg-stack.c (record_reg_life): Mark an unused reg as such, even
	if it appears in SET_SRC.

Fri Aug 28 17:40:49 1992  John F Carr  (jfc at Athena.MIT.EDU)

	* tree.c (chainon): Check for op2 being the last elt of the chain.

Fri Aug 28 13:26:56 PDT 1992  Ron Guilmette  (rfg at ncd.com)

	* cccp.c (do_pragma): Use rindex, not strrchr.

	* tree.h (BLOCK_END_NOTE):  Macro definition added.
	(struct tree_block):  `end_note' field added.
	* stmt.c (last_block_end_note):  New variable.
	(remember_end_note):  New function.
	(expand_end_bindings): Save NOTE_INSN_BLOCK_END in last_block_end_note.
	* c-decl.c, cp-decl.c (poplevel):  Call `remember_end_note' for each
	newly created BLOCK node.
	* integrate.c (adjust_copied_decl_tree):  New function.
	(save_for_inline_copying):  When making copies of NOTE_INSN_BLOCK_END
	notes, stash a "forwarding" pointer in the original to point to the
	copy.  Also, when all BLOCKs & insns for a function have been copied,
	call `adjust_copied_decl_tree' to fixup the end_note pointers in the
	copied BLOCKs.

Fri Aug 28 13:25:59 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* cccp.c (do_pragma): In prev. change, use U_CHAR *, not char *.

Fri Aug 28 09:11:56 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* m88k.h (ADJUST_COST): Add definition.

Thu Aug 27 18:27:02 1992  James Van Artsdalen  (james at bigtex.cactus.org)

	* c-decl.c (init_decl_processing): Add sin and cos as built-in
	functions.
	* expr.c (expand_builtin): Likewise.

	* expr.h (sin_optab,cos_optab): Declare optabs for sin and cos.
	* optabs.c (sin_optab,cos_optab): Define them.
	(init_optabs): Initialize them.

	* tree.h (BUILT_IN_SIN,BUILT_IN_COS): New builtin codes.

	* reg-stack.c (record_note_if_dead): Delete function.
	(record_reg_life_pat): Rewrite to handle any sort of pattern.
	(record_reg_life): Change interface to record_reg_life_pat.

	(stack_reg_life_analysis): Don't assume that MODE_FLOAT values are
	always returned in a float reg.

	(subst_stack_regs_pat): Add support for sin and cos insns.

	* i386.c (all gen_rtx (CONST_INT) references): Use GEN_INT to
	generate const_int rtx.
	(legitimize_pic_address): Pass NULL_RTX instead of "0" as pointer.

	* i386.md (all patterns): Use GEN_INT instead of gen_rtx to get
	const_ints.
	Avoid double-negative "! NON_*" constructs for clarity.
	Pass NULL_PTR as null parameter instead of 0.

	(sqrtM2): Patterns are only valid if IEEE FP or -ffast-math.
	(sinM2,cosM2): New patterns.
	(zero_extract test): New pattern.
	(movstrsi): Rewrite expander to handle operands correctly.

Thu Aug 27 16:58:09 1992  Michael Meissner  (meissner@osf.org)

	* genattrtab.c (MAX_DIGITS): New macro to gauge how much space we
	need to reserve when printing integers.
	(expand_delays): Use sizeof and MAX_DIGITS to properly size the
	strings when calling attr_printf.
	(expand_units): Ditto.
	(encode_units_mask): Ditto.
	(make_numeric_value): Ditto.
	(oballoc): New macro, to allocate from the hash_obstack.
	(convert_const_symbol_ref): Call oballoc instead of xmalloc.
	(get_attr_value): Ditto.
	(fill_attr): Ditto.
	(make_length_attrs): Ditto.
	(gen_attr): Ditto.
	(gen_insn): Ditto.
	(gen_delay): Ditto.
	(gen_unit): Ditto.
	(find_attr): Ditto.
	(main): Ditto.

Thu Aug 27 14:47:16 1992  Mike Stump  (mrs@mole.gnu.ai.mit.edu)

	* cp-decl.c (curent_block, struct binding_level, poplevel): Copy
	Tue Aug 25 16:29:47 and Wed Aug 26 01:56:30 changes in c-decl.c by
	rms.

Thu Aug 27 01:32:11 1992  Paul Eggert  (eggert@twinsun.com)

	* c-lex.c, cp-lex.c (readescape): DEL isn't printable.
	* c-typeck.c (check_format): Likewise.

Wed Aug 26 20:42:36 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-lex.c (readescape): For \x, don't include leading 0's in count.

	* c-decl.c (init_decl_processing): Fix type of __builtin_constant_p.

	* expr.c (emit_block_move): When trying movstrMM, cvt size to mode MM.

	* c-parse.y (stmt): For computed goto, convert arg to void *.

	* fold-const.c (fold): Do A op C1 ? A : C2 opt only for INTEGER_TYPEs.

Wed Aug 26 20:19:56 1992  Mike Stump  (mrs@wombat.gnu.ai.mit.edu)

	* cp-decl.c (insert_block, delete_block): New functions.
	* cp-parse.y (primary, using compstmt): Call delete_block instead
	of clearing TREE_USED.

	11th Cygnus<-->FSF merge.

	Wed Aug 26 12:02:41 1992  Mike Stump  (mrs@rtl.cygnus.com)

	* cp-decl.c (finish_function):  Don't core dump when a conversion is
	ambiguous.

	Tue Aug 25 16:32:42 1992  Mike Stump  (mrs@rtl.cygnus.com)

	* cp-init.c (build_new), cp-typeck.c (build_c_cast): Handle ``new
	type ( ... )'' better.  Default constructors and better error
	checking.

	Tue Aug 25 01:21:48 1992  Mike Stump  (mrs@cygnus.com)

	* cp-decl2.c (finish_file):  Mark " @%$#@!" as being internal.

	Mon Aug 24 16:40:15 1992  Brendan Kehoe  (brendan@cygnus.com)

	* cp-lex.c (check_newline): For `#pragma implementation', use
	strcmp to check if it was done at the top level, rather than relying
	on the pointers being the same.

	Mon Aug 24 20:48:16 1992  Mike Stump  (mrs@cygnus.com)

	Fri Aug 21 14:19:27 1992  Ron Guilmette  (rfg at ncd.com)

	* cp-decl2.c (grokclassfn): Mark the artificial `this' parameter as
	"artificial".

	Thu Aug 20 22:59:16 1992  Mike Stump  (mrs@cygnus.com)

	* cp-spew.c (arbitrate_lookup): Make sure the type name in an
	argument list followed by &, or &) is seen as a type name, even when
	there is an enumeration constant with the exact same name.

	Thu Aug 20 21:58:30 1992  Mike Stump  (mrs@cygnus.com)

	* cp-search.c (get_first_matching_virtual): Don't core dump when a
	declaration of a static member is seen with the same name as a base
	class virtual function.

	Thu Aug 20 21:20:31 1992  Mike Stump  (mrs@cygnus.com)

	* cp-decl.c (finish_function): Don't core dump on parse errors.

	Thu Aug 20 20:52:43 1992  Mike Stump  (mrs@cygnus.com)

	* cp-method.c (build_component_type_expr): Don't core dump on parse
	errors.

	Thu Aug 20 18:31:58 1992  Mike Stump  (mrs@cygnus.com)

	Mon Aug 17 17:08:11 1992  Chip Salzenberg  (chip@tct.com)

	Copy some changes from the C front-end:

	* cp-type2.c (process_init_constructor): Warn about partly bracketed
	initializers.
	* cp-typeck.c (build_component_ref): Don't warn for compound and
	conditional expressions when pedantic.  These are valid in ANSI C.

	Thu Aug 20 16:11:58 1992  Mike Stump  (mrs@cygnus.com)

	* cp-decl.c (start_decl), cp-parse.y (have_extern_spec): extern "C"
	int i; is only a declaration, but a definition, make it so.

	Thu Aug 20 14:46:39 1992  Mike Stump  (mrs@cygnus.com)

	Thu Aug 20 02:36:39 1992  Ron Guilmette  (rfg at ncd.com)

	* cp-lex.c (cons_up_default_function): Use DECL_SOURCE_LINE = 0 for
	compiler generated things, not DECL_IGNORED_P.

	Thu Aug 20 13:13:45 1992  Mike Stump  (mrs@cygnus.com)

	Wed Aug 19 13:09:45 1992  Ron Guilmette  (rfg at ncd.com)

	* cp-decl.c (grokdeclarator): Propagate some changes from the C
	front-end to deal with variable sized arrays.

	Wed Aug 19 16:55:43 1992  Mike Stump  (mrs@cygnus.com)

	* cp-cvt.c (convert_to_reference): Improve wording on error message.
	* cp-method.c (type_as_string), cp-pt.c
	(mangle_class_name_for_template), cp-xref.c (GNU_xref_decl): Delete
	first argument to type_as_string as it is not needed anymore.

	Wed Aug 19 15:29:02 1992  Mike Stump  (mrs@cygnus.com)

	Wed Aug 19 13:09:45 1992  Ron Guilmette  (rfg at ncd.com)

	* cp-decl.c (kept_level_p): Update from C frontend.

	Wed Aug 19 14:47:08 1992  Mike Stump  (mrs@cygnus.com)

	* cp-decl2.c (groktypefield): Old style conversion operators
	are being desupported.  Conversion operators much have an
	`operator' in front of them.

	Wed Aug 19 01:57:04 1992  Mike Stump  (mrs@cygnus.com)

	* cp-call.c (ideal_candidate): Fix bug introduced on Jan 21
	7:24:21.  Warn about ambiguous function calls with multiple
	same cost conversions.

	Wed Aug 19 00:08:18 1992  Mike Stump  (mrs@cygnus.com)

	* cp-decl.c (grok_enum_decls):  Remove invalid error message.

	Mon Aug 17 18:59:18 1992  Mike Stump  (mrs@cygnus.com)

	* cp-cvt.c (convert_to_reference, convert,
	build_type_conversion_1, build_type_conversion), cp-init.c
	(build_dynamic_new), cp-typeck.c (build_modify_expr_1,
	convert_for_initialization): Always use constructor_name, and
	never TYPE_IDENTIFIER (type) and similar things.
	* cp-init.c (expand_aggr_init_1): Try TYPE_HAS_CONSTRUCTOR
	before wasting time trying build_method_call.
	* cp-xref.c: Don't include memory.h.

	Mon Aug 17 15:10:21 1992  Mike Stump  (mrs@cygnus.com)

	* cp-init.c (expand_aggr_init_1): Check for ambiguous
	conversion.  One through constructor and the other through a
	user defined conversion operator.

	Mon Aug 17 11:51:27 1992  Mike Stump  (mrs@cygnus.com)

	* cp-call.c (convert_harshness): When an argument is T, a T&
	should be choosen over a const T& when selecting overloaded
	functions.

	Mon Aug 17 01:37:06 1992  Mike Stump  (mrs@cygnus.com)

	* cp-call.c (build_method_call): The second argument to
	operator delete is sometimes magically deleted.
	* cp-decl.c (init_decl_processing, grokfndecl): Global
	operator delete never has two arguments.

	Wed Aug  5 18:54:19 1992  Mike Stump  (mrs@cygnus.com)

	* cp-class.c (finish_struct), cp-tree.c (layout_basetypes):
	Make sure VFIELD_BASEs are aligned.  This fixes a really
	annoying problem that causes code that uses complex
	inheritance hierarchies that have virtual bases to get a
	segmentation fault.

	Wed Aug  5 12:35:07 1992  Mike Stump  (mrs@cygnus.com)

	Wed Aug  5 08:10:34 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* cp-tree.c (__eprintf): `line' is unsigned.
	* cp-lex.c: Include stdlib.h and locale.h if needed.
	* cp-typeck.c (mark_addressable): Use DECL_EXTERNAL not
	TREE_EXTERNAL.

	Wed Aug  5 03:20:07 1992  Mike Stump  (mrs@cygnus.com)

	* cp-class.c (finish_struct_methods): Check to make sure
	operator delete is not overloaded.
	* cp-decl.c (grokfndecl): Check to make sure operator delete
	is declared properly.

	Tue Aug  4 16:52:28 1992  Mike Stump  (mrs@cygnus.com)

	Mon Aug  3 22:55:04 1992  Michael Meissner  (meissner@osf.org)

	* cp-decl.c (grokdeclarator): Make sure const and volatile get
	put on the type built when building reference types.
	* cp-parse.y (attrib):  tree_cons takes three arguments, not
	two.
	* cp-tree.h:  Add hash_chainon, build_virtual_init,
	build_vbase_delete, build_vbase_vtables_init.
	* cp-typeck.c (build_modify_expr_1. build_modify_expr):
	build_unary_op takes three arguments, not two.
	
	Tue Aug  4 16:07:57 1992  Mike Stump  (mrs@cygnus.com)

	Sat Aug  1 16:52:20 1992  John Carr  (jfc@Athena.MIT.EDU)

	* cp-decl.c ():  Make sure the base type of an ARRAY_TYPE is
	layedout before using it.

Wed Aug 26 17:04:45 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* tree.h (current_block): Declared.

Wed Aug 26 15:42:11 1992  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	Major rework to have caller-saves emit load/store double insns when
	possible and to avoid useless resaving of registers restored for
	source accesses only.
	* caller-save.c (toplevel): All arrays are multi-dimensional to
	hold information for multiple save/restore insns.  New variable
	hard_regs_need_restore.
	(choose_hard_reg_mode): New argument `nregs' indicating how many
	hard registers are desired.  All callers changed.
	(init_caller_save): Change initialization to handle multiple
	register saves.  A call-used register can not be live across
	if we can not find a single register mode to save it in.
	(multiple register saves are optional)
	(init_save_areas): Change initialization of regno_save_mem to
	handle multiple register saves.
	(setup_save_areas): Allocate space for consecutive hard registers
	in aligned consecutive memory locations.   When allocating space
	for consecutive hard registers, also initialize regno_save_mem
	for each hard register stored as a single word.
	(save_call_clobbered_regs): Initialize hard_regs_need_restore.
	Set hard_regs_need_restore to hard_regs_saved after crossing
	a call.  Also recompute n_regs_saved.  At the end of a basic block
	we need only restore registers in hard_regs_need_restore.
	(set_reg_live, clear_reg_live): Do the right thing for 
	hard_regs_need_restore and hard_regs_saved.
	(restore_referenced_regs): Just return if X is a clobber.
	Test hard_regs_need_restore to determine when to restore a hard
	register from the save area.
	(insert_save_restore): Now returns the number of extra registers
	saved/restored.  New argument `maxrestore' which constrains how
	many hard registers should be restored.  All callers changed.
	Do stores of consecutive registers with double store insns if
	possible.  Else do them with single word insns. Likewise for
	loads, except constrained by maxrestore.  Set hard_regs_saved
	and hard_regs_need_restore appropriately to minimize useless
	saves into the save area.  Test against	hard_regs_need_restore
	when trying to restore multiple regs and similarly test against
	hard_regs_saved when storing multiple regs. 


Wed Aug 26 14:24:28 1992  Michael Meissner  (meissner@osf.org)

	* mips.h (LINK_SPEC): Pass -shared, -non_shared on to linker.
	* mips-bsd.h (LINK_SPEC): Ditto.
	* mips-n5.h (LINK_SPEC): Ditto.
	* mips-svr4.h (LINK_SPEC): Ditto.
	* mips-sysv.h (LINK_SPEC): Ditto.
	* iris.h (LINK_SPEC): Ditto.
	* dec-osf1.h (LINK_SPEC): Ditto.

	* dec-osf1.h (DECSTATION): Don't define, since decstatn.h which is
	included defines it.
	(OBJECT_FILE_COFF): Undefine, since the DEC OSF/1 ldfcn doesn't
	look like the coff version.

	* decstatn.h (LINK_SPEC): Don't define if already defined.

Wed Aug 26 13:56:08 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* reorg.c:  Enhance to fill the last delay slot of a call with an
	unconditional jump.
	(fill_simple_delay_slots): Look for the case of a call/branch
	first.  If this applies, record the jump as `last_delay_insn'.
	Later, don't look for additional delay insns if the last one has
	alreay been filled. 
	(mark_target_live_regs): A sequence may end in an unconditional
	branch.

	* m88k.md (define_function_unit): Correct and simplify memory unit
	specification. 

Wed Aug 26 01:56:30 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-decl.c (poplevel): Store into BLOCK iff it is non-null.

Tue Aug 25 23:24:45 1992  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* sched.c: Add #ifdef INSN_SCHEDULING around variables only used
	by schedule_insns.
	(INSN_QUEUE_SIZE): Delete default definition.

	* optabs.c, expr.c: Partially undo Mar 7 change.  Only call
	emit_library_call with no_queue == 1 for const functions.

	* sparc.c (SF_MODES): Allow SImode in fp registers.
	(output_floatsisf2, output_floatsidf2, output_floatsitf2): Delete.
	* sparc.h: Delete declarations of the above 3 functions.
	* sparc.md (float*, fix*): Rewrite to match hardware; take/put
	integer input/output from/to fp register instead of memory or
	general register.  Delete 6 now obsolete combiner patterns.

Tue Aug 25 16:40:15 1992  Brendan Kehoe  (brendan@cygnus.com)

	* cccp.c (do_pragma): Warn if `#pragma implementation "foo.h"' is
	invoked	after "foo.h" has been included.

Tue Aug 25 16:29:47 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* stmt.c (struct goto_fixup): New field context.
	(fixup_cleanups): Function deleted.
	(fixup_gotos): Put the fixup in a block, and put that block
	into its proper place.  Use sequences, not reorder_insns.

	* c-decl.c (current_block): New function.
	(struct binding_level): New field this_block.
	(poplevel): Use this_block if nonzero, rather than making new BLOCK.

	* sched.c (INSN_QUEUE_SIZE): Add default definition.

Tue Aug 25 15:19:26 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* sched.c (schedule_block): Add a virtual cycle counter CLOCK.
	Pass CLOCK to schedule_insn.	    
	Compute the tail in the scheduling loop, not before it.
	Enable the stall code that advances the insn queue.  
	Select the insn to schedule and block others with schedule_select.
	(adjust_priority): Renamed from launch_link.
	(schedule_insn): Renamed from launch_links.

	* genattrtab.c (struct attr_desc): Add unsigned_p field.
	(struct function_unit_op): Add issue_delay, conflict_exp, and
	issue_exp fields.  Drop busyexp field.
	(struct function_unit): Add needs_blockage_function,
	needs_range_function, issue_delay, and max_blockage fields.  Drop
	costexp, and busy delay fields.
	(enum operator): Add POS_MINUS_OP, EQ_OP, MIN_OP, RANGE_OP.
	(operate_exp): Implement new ops.
	(make_internal_attr): Set unsigned_p based on the value of SPECIAL.
	(write_attr_get): Function is unsigned when unsigned_p is true.
	(write_attr_valueq): Write hex value of large constants in a comment.
	(simplify_by_exploding): Check for EXP having no EQ_ATTR expressions
	and for all values as the default.
	(find_and_mark_used_attributes): Add TERMS and NTERMS parameters.
	(max_attr_value): Allow IF_THEN_ELSE.
	(simplify_knowing, write_complex_function, extend_range): New
	functions.
	(gen_unit): Use local variables to name the fields.  Change the
	meaning of busy-delay to issue-delay.
	(expand_units): Compute issue_exp.  Write attributes for computing
	`<name>_unit_blockage' and `<name>_unit_blockage_range' functions.
	Compute max_blockage, and the needs_*_function values.
	(write_function_unit_info): Write blockage function and conflict cost
	functions using write_complex_function.  Write new function_unit_desc
	fields.
	* genattr.c (extend_range, init_range): New functions.
	(write_units): Add blockage_function, blockage_range_function,
	max_blockage and max_issue_delay fields to struct function_unit_desc.
	Drop max_busy_cost field.  Write #defines for min/max blockage,
	issue delay, multiplicity, and simultaneity and for BLOCKAGE_BITS
	and INSN_QUEUE_SIZE.
	(main): Compute the new values.
	* sched.c (insn_queue): Use INSN_QUEUE_SIZE.
	* rtl.def (define_function_unit): Update documentation.

	* sched.c (insn_units, insn_blockage, insn_tick, unit_last_insn,
	unit_tick, unit_n_insns): New variables.
	(schedule_insns): Allocate and initialize insn_tick, insn_units, and
	insn_blockage.
	(insn_unit, blockage_range, clear_units, prepare_unit, schedule_unit,
	actual_hazard_this_instance, actual_hazard, potential_hazard,
	schedule_select): New functions.
	(schedule_block): Add dependencies to force insns to remain in order
	at the end of a block rather than relying on having the scheduler
	issue them in priority order. 

	* sched.c (insn_cost): Add LINK and USED parameters.  All callers
	changed.  Supply an ADJUST_COST interface.
	(insn_cost): Make a dependence from a USE insn free.
	(priority): Clear the link cost adjustment bits.
	* rtl.h (LINK_COST_ZERO, LINK_COST_FREE): New macros.

	* genattrtab.c (expand_units): Use the normalized values of the
	unit's CONDEXP and BUSYEXP.

	* a29k.md (define_function_unit): Change meaning to ISSUE-DELAY.
	* i960.md (define_function_unit): Change meaning to ISSUE-DELAY.
	* m88k.md (type attribute, movdi movdf insns): Add loadd.
	(unit attribute): Delete.
	(function units): Correct simultaneity values.  Break out
	independent units.  Add conflict matrix for the 88100 load double.
	* mips.md (define_function_unit): Change meaning to ISSUE-DELAY.
	* pa.md (define_function_unit): Change meaning to ISSUE-DELAY.
	* sparc.md (define_function_unit): Change meaning to ISSUE-DELAY.
	Merge FP_MUL, FP_DIV, and FP_SQRT into one function unit.

	* jump.c (delete_computation): Derived from delete_jump.
	(delete_jump): Use delete_computation.

Tue Aug 25 13:42:19 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* final.c (final_scan_insn): If 2 consec line notes have same line num,
	can omit one.

Tue Aug 25 13:38:19 1992  Michael Meissner  (meissner@osf.org)

	* mips.h (MIPS_VERSION): Set Meissner version # to 24.
	(ASM_FINAL_SPEC): Use %U to get the last file name created with
	%u, rather than %u.
	(ARG_POINTER_REGNUM): Use the hardwired register $0 as the
	argument pointer, instead of the frame pointer, to allow the frame
	pointer to be the same as the stack pointer after the initial
	stack allocations.  This is to allow GCC generated code to be
	linked against MIPS shared libraries.  The linker rearranges the
	code, and needs to have a frame pointer, if used, to be the same
	as the stack.  The argument pointer is always eliminated in favor
	of the stack pointer or frame pointer.
	(FRAME_GROWS_DOWNWARD): Don't define this any more.
	(STARTING_FRAME_OFFSET): Locals start after the stack area to pass
	arguments to called functions.
	(STACK_DYNAMIC_OFFSET): If function is a leaf function, but calls
	__builtin_alloca, assume a default argument area, so the MIPS
	linker doesn't think a second frame pointer is created.
	(INITIAL_FRAME_POINTER_OFFSET): Don't define, since we use
	elimination instead.
	(ELIMINABLE_REGS): Define to eliminate both the stack pointer and
	frame pointer, since they are now separate.
	(CAN_ELIMINATE): Ditto.
	(INITIAL_ELIMINATION_OFFSET): Ditto.
	(ELIGIBLE_FOR_EPILOGUE_DELAY): Don't allow variables based off of
	the argument pointer, in addition to frame and stack pointers.
	(MUST_SAVE_REGISTER): Add in GP_REG_FIRST to 31, in case we ever
	change the base of the gp registers.
	(MIPS_STACK_ALIGN): Use ~7, instead of 0xfffffff8.

	* mips.c (number_functions_processed): Delete variable, nobody
	uses it anymore.
	(mips_debugger_offset): Add support for the frame pointer being
	the same as the stack pointer, instead of being the same as the
	argument pointer.  Abort if the address is not based on any of the
	stack, frame, or argument pointers.
	(print_operand_address): Add checks for the arg pointer not being
	eliminated.
	(function_prologue): Ditto.
	(mips_expand_prologue): Ditto.
	(function_epilogue): Ditto.
	(mips_expand_epilogue): Ditto.
	(function_epilogue): Strip leading '*' if it exists from
	current_function_name when printing statistics.  Delete increment
	of number_functions_processed.
	(compute_frame_size): Don't base extra_size on the macro
	STARTING_FRAME_OFFSET.  If function is a leaf function, but calls
	__builtin_alloca, allocate an arg area, so that the MIPS linker
	will not complain about creating a second frame pointer.  Move the
	argument save area beneath local variables.

	* decrose.h (ASM_FINAL_SPEC): Use %U to get the last file name
	created with %u, rather than %u.

	* gcc.c (do_spec_1): Add %U to return the last name generated with
	%u.  This is for use with mips-tfile, to find the generated object
	file.


Mon Aug 24 18:09:34 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-typeck.c (build_unary_op): For ADDR_EXPR, just set TREE_CONSTANT
	if staticp, but don't clear TREE_CONSTANT.

Mon Aug 24 13:52:13 1992  Brendan Kehoe  (brendan@cygnus.com)

	* gcc.c (process_command): Don't set verbose_flag if they make a
	typo (e.g., `-v-E'); only when it's exactly "-v".

Mon Aug 24 06:49:16 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c (subst): When moving operation inside IF_THEN_ELSE,
	make a new rtx instead of using SUBST due to sharing.

	* combine.c (simplify_comparison): Correct test for sign extension
	when trying to widen comparison.

Sun Aug 23 18:58:33 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* fold-const.c (fold): Avoid the normal STRIP_NOPS on arg of NOP_EXPR.

Sun Aug 23 15:32:03 PDT 1992  Ron Guilmette  (rfg at netcom.com)

	* stmt.c (expand_end_bindings):  Generation of NOTE_INSN_BLOCK_END
	moved down so that it occurs after call to `expand_cleanups'.

Sun Aug 23 16:24:32 1992  Michael Meissner  (meissner@osf.org)

	* decrose.h (CPP_SPEC): Don't define strcmp as __builtin_strcmp in
	the case neither -fbuiltin nor -fno-builtin were defined.
	* i386rose.h (CPP_SPEC): Ditto.

Sun Aug 23 02:03:41 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* libgcc2.c (__builtin_new): Cast the result of malloc.

	* toplev.c: Fix typo in prev change.

	* c-decl.c (insert_block, delete_block): New functions.
	* c-parse.y (primary, using compstmt): Call delete_block
	instead of clearing TREE_USED.
	* expr.c (expand_expr): For BIND_EXPR, call insert_block on the block.
	
Sat Aug 22 14:12:02 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* configure: Use absolute pathname in value of INSTALL.

Sat Aug 22 06:42:39 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* emit-rtl.c (insn_emit_once): Provide a zero constant for CC modes.

Fri Aug 21 18:33:30 1992  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* reorg.c (fill_simple_delay_slots): Always try to fill empty
	delay slots with insns from beyond the delay insn, even if
	optimize_skip was attempted.
	(fill_simple_delay_slots): When filling with insns from after the
	delay insn, make sure to always account for the sets and
	references in the delay insn.

Fri Aug 21 16:47:06 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* sparc.c (print_operand): Use output_operand_error for unknown code.

	* c-typeck.c (build_conditional_expr): Use TREE_READONLY and
	TREE_THIS_VOLATILE, not TYPE_...

Fri Aug 21 14:02:20 1992  James Van Artsdalen  (james at bigtex.cactus.org)

	* reload.c (find_dummy_reload): Restore original RTX instead of
	passed IN rtx.

Fri Aug 21 07:53:12 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* optabs.c (expand_binop): If, e.g., mulqi3 doesn't exist, try
	mulqihi3.

	* rs6000.h (FUNCTION_ARG): Don't make an EXPR_LIST if making a libcall.

	* combine.c (subst): Move up test for too many restarts.
	If we restart, clear OP0_MODE since we don't know it.

Fri Aug 21 02:11:43 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* emit-rtl.c (emit_insns_after): New function.

Fri Aug 21 01:53:04 1992  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.md (call_value+1): For non-dynamic calls, use the "call"
	attribute, set length to 1, and fix output template to work
	properly with delay slots.

	* pa.md (address and use_call_clobbered attributes): Deleted,
	these attributes are useless.  All references deleted.
	(call define delay): Use "in_branch_delay" as the condition since
	"call" delay slots and unconditional "branch" delay slots allow the
	same type of insns. 
	(in_call_delay conditional): Deleted.
	(branch define delay): Do not define an annul-if-true delay slot.
	It is useless for an unconditional branch.
	(all delay branch conditionals): Make sure "call", "dyncall", "multi",
	and "milli" insns are explicitly disallowed in delay slots.

	* pa.c (output_mul_insn): Delete nop after branch in template,
	conditionally emit a nop if the delay slot was not filled. (via %#)

	* pa.c (output_function_prologue): Handle profiling in a function
	without a frame pointer.

Thu Aug 20 16:16:40 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* va-m88k.h (__INT_VARARGS_H): Define this to avoid trouble on DG/UX.

Thu Aug 20 11:07:26 1992  Michael Meissner  (meissner@osf.org)

	* final.c: Move include of stdio.h before output.h.

Thu Aug 20 01:08:55 1992  Pat Rankin  (rankin at eql.caltech.edu)

	Support for bootstrapping cpp & cc1 with VAX C under VMS.

	* xm-vax-vms.h (USE_C_ALLOCA,NO_STAB_H): Define for VAXC.
	(bcopy,bzero,bcmp,index,rindex): Define as ANSI/SYSV counterparts.
	(QSORT_WORKAROUND, qsort): New macros, for avoiding buggy
	qsort in VAXCRTL library.
	(check_for_full_enumeration_handling,...): Use macros to shorten
	several external names which are longer than 31 characters to
	avoid warnings about truncation.
	(unlink): Remove redundant definition.
	* vax.c (not_qsort): New function.
	* cccp.c (toplevel: create_definition): Move forward declaration
	past the definition of struct macrodef.
	(strncat): New function.
	(bcopy, bzero, bcmp): Remove #if VMS code--always use inline C loops.
	* genrecog.c, reload1.c: Compare enums (preds. codes, mem_mode)
	explicitly to 0 in conditionals to work-around a VAXC bug that
	disallows enum as arguments to && and || operators.
	* getpwd.c (getpwd): Add alternative defn for VMS.
	* toplev.c (environ): Make declaration conditional.
	(main: -g debugging setup): Get rid of \ in #if condition.
	* make-cccp.com,make-cc1.com (CC,CFLAGS,LIBS): Add commented command
	variants for bootstrapping gcc-cpp and gcc-cc1 with VAXC.
	* make-cccp.com (alloca): Build alloca.obj from alloca.c if LIBS needs it.

	Not yet installed:

	* machmode.h (FILE_TYPE): For VMS, make sure FILE_TYPE is not
	defined as a macro, so that VAXC's <stdio.h> won't break tree.h.
	* genemit.c (gen_exp): #if VAXC, output a newline in front of
	gen_rtx calls, to prevent excessively long lines in insn-emit.c.

Thu Aug 20 11:32:18 1992  Michael Tiemann  (tiemann@mole.gnu.ai.mit.edu)

	* cp-tree.h: Fix incorrect comment about "$this" needing to
	be lexicographically less than any other identifier.

Thu Aug 20 05:37:00 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* a29k.md (load_multiple): Operand 2 should be a MATCH_OPERAND.
	(store_multiple_{,no_}bug): Likewise.

 	* reorg.c (mark_set_resources): Fix two bugs in last change.

	* expr.c (init_expr_once): Set direct_load and direct_store if SOME
	hard register can be loaded or stored; not just if the first one
	we pick can be.

Thu Aug 20 01:40:43 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* combine.c, emit-rtl.c, final.c, gcc.c, genattrtab.c, mips-tfile.c:
	Put include of stdio.h after GCC header files
	(for i860-stardent-sysv4).
	* tree.c: Likewise.

	* fixincludes (stdio.h): Rename va_list to __va_list__ to coexist
	with gvarargs.h.

Wed Aug 19 21:06:49 1992  Jim Wilson  (wilson@cygnus.com)

	* cccp.c (finclude): Increment indepth before calling
	trigraph_pcp, so that warning uses the correct file name.

Wed Aug 19 07:07:41 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c (force_to_mode): Add missing test of and_optab.

	* genconfig.c (have_cmove_flag): New variable.
	(walk_insn_part): Add new parm NON_PC_SET_SRC; all callers change.
	Look for IF_THEN_ELSE in a SET_SRC that isn't setting PC and
	set have_cmove_flag if so.
	(main): Define HAVE_conditional_move if have_cmove_flag is non-zero.
	* combine.c (subst, case AND): Only make IF_THEN_ELSE if conditional
	moves exist.

	* cse.c (find_comparison_args): Look for comparison operations
	if the second arg is 0 in any mode.
	(record_jump_cond): Don't make classes equivalent for floating-point
	equality comparison.

	* local-alloc.c (alloc_qty_for_scratch, block_alloc): Provide
	alternate code in some cases when REGISTER_CONSTRAINTS is not
	defined.
	(requires_inout_p): Only used when REGISTER_CONSTRAINTS is defined.

	* reorg.c (mark_set_resources): Add new parm IN_DEST; add callers
	changed.
	Rework to scan an entire insn to look for auto-inc operations.

	* unroll.c (copy_loop_body): Add missing declaration of EXIT_LABEL
	parameter.

	* function.c (instantiate_decl): New function.
	(instantiate_decls{,_1}): Call it.

	* combine.c (simplify_comparison): Add a few more cases where we can
	do the comparison in a wider mode.

	* combine.c (distribute_notes, REG_EQUAL): Don't put back a note
	with a non-constant expression since it may no longer be valid.

Tue Aug 18 23:07:33 1992  Mike Stump  (mrs@cygnus.com)

	* expr.c (expand_expr): The first expansion of a TARGET_EXPR
	is marked by DECL_RTL (slot) being filled in AND TREE_OPERAND
	(exp, 1) being wiped-out with a NULL_TREE, not just the
	DECL_RTL (slot) being filled in.

Tue Aug 18 00:07:23 1992  Dennis P. Glatting  (dglattin@trirex.com)

	* objc-actions.c
	(build_selector_translation_table): NULL-terminate the
	selector list.  Mark _OBJC_SELECTOR_REFERENCES_decl as static,
	not extern.

Tue Aug 18 21:38:46 1992  Mike Stump  (mrs@hal)

	* xcoffout.c (assign_type_number):  Skip decls with no name.

	* expr.c (expand_expr): When expanding TARGET_EXPRs, make sure
	that they are only expanded once, after the first expansion,
	the rtl can be used without further expansions.

Tue Aug 18 12:58:33 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* x-i386sco (X_CFLAGS): Defined.

	* stmt.c (expand_return): Call emit_queue in ignore-the-value case.
	(expand_end_bindings): Check DECL_IN_SYSTEM_HEADER for unused warnings.

	* combine.c (simplify_comparison):
	Rearrange conditional in SUBREG case.

Tue Aug 18 06:49:43 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* cccp.c (HOST_WIDE_INT): Copy definition from machmode.h.
    
	* c-typeck.c (parser_build_binary_op): Replace the assignment of CLASS.

	* configure (Makefile edits): Make the edits independent.
	* Makefile.in (sed marker): Use the order {target, host, cross-make}.

Tue Aug 18 00:15:12 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-typeck.c (parser_build_binary_op):
	For Z<Y<Z warning, test class of CODE; don't use TREE_CODE (result).

	* cccp.c (pcfinclude): Use HOST_WIDE_INT for rounding a pointer.

Mon Aug 17 14:57:18 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-typeck.c (digest_init): Test TREE_TYPE (inside_init) is
	nonzero before testing anything else about it.

	* i860.md (mulsi3): Use emit_insn on results of gen fcns.
	Return with DONE.

Mon Aug 17 11:50:23 1992  Mark Eichin  (eichin@cygnus.com)

	* cccp.c (do_include): If search_start is NULL, complain that
	we had nowhere to look.

Mon Aug 17 14:53:46 1992  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* function.c (assign_parms):  When copy arg passed by invisible
	reference to pseudo reg, don't use nominal_mode.

	* i960.c (i960_address_cost): Don't abort for invalid addresses.

Mon Aug 17 14:29:33 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-typeck.c (digest_init):
	Use TYPE_MAIN_VARIANT comparing type of inside_init.

Mon Aug 17 10:32:08 1992  Michael Meissner  (meissner@osf.org)

	* genattrtab.c (simplfy_with_current_value): Return 'exp' to
	caller instead of random value.
	(convert_set_attr_alternative): Delete unused variable newexp.
	(simplify_cond): Delete unused variable spacer.
	(make_alternative_compare): Delete unused variable alternative.
	(optimize_attr): Delete unused variable nextie.
	(main): Delete unused variable av.
	(simplify_by_alternatives): #if 0, since the only caller is also
	#ifdef'ed away.
	(copy_rtx_unchanging): #if 0 variables that are only used inside
	of other code under #if 0.

Mon Aug 17 07:37:41 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* a29kunix.h (LINK_SPEC): Add %s for default.ld.
	(LINK_LIBGCC_SPECIAL): No longer needed.
	(ASM_FILE_STARY): Add shared data section.
	(SHARED_SECTION_ASM_OP): New macro.
	(OVERRIDE_OPTIONS): If -fshared-data, add -fno-common.

	* alpha.c (alpha_function_needs_gp): New variable.
	(output_prolog): Set it.
	Write label after LDGP if function has recursive call and needs GP.
	(current_function_operand, divmod_operator, alpha_gp_dead_after):
	New functions.
	(print_operand, case 'E', 'F'): New cases.
	(alpha_need_gp): Just test for type of LDSYM, not CALL_INSN.
	* alpha.h (GO_IF_LEGITIMATE_ADDRESS): Allow a SYMBOL_REF for
	the current function as a valid address.
	* alpha.md (divXi3, udivXi3, modXi3, umodXi3): New patterns.
	(cmov): Add pattern for addq/cmov for signed divide by power of 2.
	(call): Omit GP restore if it is dead.
	Add patterns for recursive calls.
	(branch): Change type of everything but calls to IBR.
	(unaligned_storehi): Fix numbering of operands.
	* xm-alpha.h (malloc, realloc, sbrk): Declare as void * if __STDC__.

	* libgcc2.c (builtin_new): Remove declaration of malloc.

	* expmed.c (expand_mult): Bound second synth_mult cost by cost of
	algorithm from first call.

	* expmed.c (expand_divmod): When doing logical operations, the size
	of COMPUTE_MODE should be used, not MODE.

	* combine.c (struct undo, struct undo_int): Replace non-portable
	usage with some unions.
	(SUBST, SUBST_INT, undo_all, gen_rtx_combine): Make consistent
	with new definitions.

	* fold-const.c (fold): Move conversion back outside of COND_EXPR
	if moving it inside didn't help anything.

	* fold-const.c (div_and_round_double): Change some more ints
	to HOST_WIDE_INTs.

	* jump.c (jump_optimize): Allow SUBREG in many places where REG
	is allowed.

	* expr.c (expand_expr, case COMPONENT_REF): Don't actually do
	extraction from memory if we want address.

	* expr.c (emit_block_move): Fix problems in last change.

Mon Aug 17 03:37:10 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* collect2.c (is_ctor_dtor): Don't collect cfront init fcns.

	* Makefile.in (GCC_FOR_TARGET): Put -B./ here.
	(GCC_CFLAGS): Not here.

Sun Aug 16 10:38:10 1992  Torbjorn Granlund  (tege@jupiter.sics.se)

	* ns32k.c (print_operand_address): Fix typo.

Sat Aug 15 20:23:39 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* cccp.c (PTR_INT_TYPE): Don't define this.
	(pcfinclude): Use int, not PTR_INT_TYPE.

Sat Aug 15 11:10:07 1992  Michael Meissner  (meissner@osf.org)

	* mips.h (ASM_FINAL_SPEC): For output of as when -c is not used, use
	%u rather than %g so each object filename will be unique.
	* decrose.h (ASM_FINAL_SPEC): Ditto.

	* x-decrose (CLIB, X_CFLAGS): Don't link in libbsd.a, instead use
	-Dvfork=fork on the command line.
	* x-encrose (CLIB, X_CFLAGS): Ditto.
	* x-i386rose (CLIB, X_CFLAGS): Ditto.

Sat Aug 15 06:36:15 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cccp.c: Remove declaration of malloc and realloc.

	* combine.c (get_last_value): Don't go past a CODE_LABEL when
	searching for a value.

	* expr.c (convert_move): Copy SUBREG to REG in one more case.

	* expr.c (do_jump*): Always do comparison in object's signedness
	now that combine can remove extraneous sign extends.

Sat Aug 15 00:52:08 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* fixincludes (ansi_compat.h): Replace this with an empty file.

	* gcc.c (process_command): In second loop over all switches,
	don't increment I for switches that don't have separate arguments.

	* cccp.c: Don't ever include stddef.h.
	(append_include_chain): Avoid using size_t.
	(initialize_builtins): Output defn of __WCHAR_TYPE__ just once.

	* ns32k.md (movstrsi1): Renamed from movstrsi.
	(movstrsi): New define_expand.

Fri Aug 14 18:51:57 1992  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* sched.c (attach_deaths_insn): Don't call attach_deaths for CLOBBERs.

Fri Aug 14 18:47:22 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* genattr.c (write_units): Write #defines for the number of
	function units, the min/max ready cost and min/max busy delay.
	Add max_busy_cost field to struct function_unit_desc.

	* genattrtab.c (simplify_by_exploding, find_and_mark_used_attributes,
	unmark_used_attributes, add_values_to_cover, increment_current_value, 
	test_for_current_value, simplify_with_current_value,
	simplify_with_current_value_aux): New functions.
	(struct function_unit): Add max_busy_cost, {min,max}_busy_delay.
	(expand_units): Use simplify_by_exploding to simplify the
	function_units_used attribute.  Compute the ready cost attributes
	as a COND in numeric order.
	(gen_unit): Compute {min,max}_ready_cost and {min,max}_busy_delay.
	(write_function_unit_info): Determine if there is only one busy
	delay value by comparing the minimum and maximum busy delay.
	Write the initializer for function_units in numeric order.
	Write out the maximum busy delay field.

	* genattrtab.c (attr_desc): Add negative_ok field.
	(find_attr, make_internal_attr): Initialize negative_ok.
	(check_attr_value): Allow negative values for CONST_STRING for
	numeric attributes with negative_ok.
	(encode_units_mask): Change the encoding of the function_units_used
	result.

	* gcc.c (do_spec_1): Add %u.
	(default_compilers): For output of as when -c is not used, use %u
	rather than %g so each object filename will be unique.

	* cexp.y, cccp.c, gcc.c (NULL_PTR): Use the same definition as
	rtl.h and tree.h.

Fri Aug 14 20:53:00 1992  Paul Eggert  (eggert@twinsun.com)

	* c-decl.c (grokdeclarator): Remove duplicate diagnostic for
	initialized parameters; start_decl already does this.

	* c-common.c (truthvalue_conversion): Optionally warn if an
	unparenthesized assignment is used as a truth value.
	* c-parse.y, objc-parse.y (expr_no_commas):
	Mark assignments for warning.

Fri Aug 14 14:45:39 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* vax.md (casesi1): Renamed from casesi.
	(casesi): New trivial define_expand invokes casesi1.
	(movstrhi, movstrhi1): Analogous change.

Fri Aug 14 14:36:52 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* reload.c (find_reloads): Ignore `%' in the last operand after
	warning.

Fri Aug 14 07:41:34 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* genflags.c (num_operands): MATCH_PARALLEL also represents an operand.

	* jump.c (invert_exp, redirect_exp): No longer static.
	Clean up order of declarations at start of file and remove
	extraneous decls.
	* unroll.c (copy_loop_body): Don't assume (pc) can be on either
	leg of jump; use invert_exp and redirect_exp instead.

	* alpha.c, alpha.h, alpha.md, xm-alpha.h, x-alpha, va-alpha.h:
	New files.
	* config.sub: Add "alpha".
	* configure: Likewise.
	* Makefile.in (USER_H): Add va-alpha.h and sort names.
	* gstdarg.h, gvarargs.h: Call va-alpha.h for Alpha.

	* rtl.def (MATCH_PAR_DUP): New RTL code.
	* genconfig.c (walk_insn_part): Treat it just like MATCH_OP_DUP.
	* genemit.c (max_operand_1): Likewise.
	(gen_exp): Treat it like MATCH_PARALLEL here.
	* genextract.c (walk_rtx): Treat it like MATCH_DUP.
	* genoutput (scan_operands): Likewise.
	* genpeep.c (match_rtx): Likewise.
	* genrecog.c (add_to_sequence): Likewise.
	* a29k.md, rs6000.md ({load,store}_multiple): Use MATCH_PAR_DUP.

	* cse.c (fold_rtx): Fix typo in two FLOAT_STORE_FLAG_VALUE tests.

	* flow.c (life_analysis, propagate_block, dump_flow_info): Add more
	missing casts to REGSET_ELT_TYPE.

	* expr.c (movstr_optab): New variable.
	(init_expr_once): Initialize it.
	(emit_block_move): Rework code that generates movstrxx insns to
	check predicates and use an optab.

	* cse.c (simplify_unary_operation): Remove "else".

Fri Aug 14 07:41:05 1992  Torbjorn Granlund  (tege@jupiter.sics.se)

	* c-decl.c, cse.c, fold-const.c, integrate.c, obstack.h, protoize.c,
	reload1.c, stmt.c, tree.c, tree.h: Phicks speling erours.

Fri Aug 14 03:21:17 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-convert.c (convert): When converting to variant of same type, fold.

	* varasm.c (assemble_variable): Change error message for unknown size.

	* c-parse.y (declmods): Don't warn for multiple storage classes
	all at the beginning.  This is either good practice or an error.

Thu Aug 13 19:43:13 1992  Paul Eggert  (eggert@twinsun.com)

	* c-decl.c (finish_decl): Avoid cascading messages for tentative
	definitions with incomplete types.

	* c-typeck.c (process_init_constructor): Warn about partly
	bracketed initializers.

Thu Aug 13 17:18:49 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* cccp.c (handle_directive): Output macro name if dump_names.

	* m68k.h: Delete junk line inserted by mistake in last patch.

Thu Aug 13 16:46:58 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* regclass.c (regclass): Don't scan the constraints if there aren't
	any operands.  Don't look for a commutative constraint in the last
	operand.

	* function.c (contains): Return the number of insns.
	(reposition_prologue_and_epilogue_notes): Count all the prologue and
	epilogue insns.

Thu Aug 13 15:20:24 1992  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* m68k.h (TARGET_SWITCHES): Make -m68040 set 01007 not 01000.

	* sparc.h (CPP_SPEC): For -mv8, define __sparc_v8__ not __sparcv8__.
	* longlong.h (__sparclite__): Define umul_ppmm, udiv_qrnnd, and
	count_leading_zeros for this sparc architecture variant.
	(__sparc_v8__): Changed from __sparc8__.

	* c-typeck.c (build_component_ref): Don't warn for compound and
	conditional expressions when pedantic.  These are valid in ANSI C.

Thu Aug 13 11:37:57 1992  Jeffrey A. Law  (law@mole.gnu.ai.mit.edu)

	* pa.c (output_function_prologue): Restore "rp" after the call to
	mcount.

Thu Aug 13 06:54:50 1992  Torbjorn Granlund  (tege@jupiter.sics.se)

	* pa.md (movsf recognizer): Output `fcpy,sgl', not `fcpy'.
	From Jeff Law:
	* pa.md (zdepi in HImode): Move this pattern after the standard
	movhi patterns.

Wed Aug 12 11:45:15 1992  Michael Meissner  (meissner@osf.org)

	* mips.h (ASM_FINAL_SPEC): For output of as when -c is not used,
	use %g, rather than %b, because the file is going to be deleted
	anyway (sync up with gcc.c Aug 4 changes).  Patch from Jim Meyering.

	* decrose.h (ASM_FINAL_SPEC): Ditto.

Wed Aug 12 03:23:30 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* fixincludes (finding all .h files): Look for links as well as
	ordinary files.

	* m68k.h (TARGET_68040): Test for 01000 or 0400.
	(TARGET_SWITCHES): Rename -m68040 to -m68020-40.
	Rename -m68040-only to -m68040.

	* hp2bsd.h (TARGET_DEFAULT): Make value 0.

Tue Aug 11 04:23:35 1992  Paul Eggert  (eggert@twinsun.com)

	* fold-const.c (operand_equal_p): Make it clear that this function
	tests for indistinguishable values, not for equality as computed by
	`=='; the distinction is important for IEEE NaNs and -0.0.

Tue Aug 11 13:10:47 1992  Fred Fish  (fnf at fishpond)

	* config.sub (amigaunix/amix):  Use sysv4 as os.
	* configure (m68k-*-amix*):  Change to m68k-cbm-sysv4* and
	eliminate fixincludes and broken_install.

Tue Aug 11 15:42:58 1992  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* function.c (identify_blocks): Handle case where no block nodes
	exist.  Use xmalloc not alloca for block_vector.
	(reorder_blocks): New argument top_block.  Handle case where no
	block nodes exist.  Always clear BLOCK_SUBBLOCKS (block) when
	adding it to the block tree.
	(all_blocks): Handle case where vector is zero. Store current
	block at offset 0 in vector, not n_blocks.  Don't count current
	block twice in n_blocks.
	* function.h (identify_blocks): Declare.
	(rtx, tree): Move undefs to the very end.
	* loop.c (loop_optimize): Delete uses of loop_number_first_block,
	loop_number_last_block, loop_number_block_level.  Correct call of
	find_loop_tree_blocks.  Add call to unroll_block_trees.
	* loop.h (loop_number_first_block, loop_number_last_block,
	loop_number_block_level): Delete declarations.
	* stmt.c: Likewise.
	(find_loop_tree_blocks): Completely rewritten to use
	identify_blocks.
	(unroll_block_trees): Completely rewritten to use reorder blocks.
	* unroll.c (unroll_loop): Delete call to unroll_block_trees.

	* unroll.c (copy_loop_body): Only copy VTOP note if it will end up
	before a loop exit test.

Tue Aug 11 09:21:47 1992  Michael Meissner  (meissner@osf.org)

	* mips.h (MIPS_VERSION): Bump meissner version # to 23.
	(CONST_CODES): Remove declaration for eliminate_constant_term
	from inside of local {}'s.
	(SELECT_SECTION_MODE): Remove declaration of variable
	mips_section_threshold  from inside of local {}'s.
	(SELECT_SECTION): Ditto.

	* mips.c (toplevel): Remove declarations for all of the gen_xxx
	functions used, since insn-flags.h contains them.

	* mip.md (fixuns_truncdfsi2): Remove extern declarations.
	(fixuns_truncsfsi2): Ditto.
	(movsi_unaligned, movsi_ulw, movsi_usw): Ditto.
	(seq, sne, sgt, sle, sgtu, sleu): Ditto.

Tue Aug 11 02:51:25 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* fixincludes (memory.h): Fix versions 1.2 and 1.3 as well as 1.4.

	* configure: Improve err msg for unknown config.

Tue Aug 11 04:02:51 1992  Paul Eggert  (eggert@twinsun.com)

	* fold-const.c (fold):  Don't fold (A op B ? A : C) if A is IEEE
	floating point, because A might be -0.0 or NaN.

	* c-typeck.c (parser_build_binary_op): Warn about expressions like
	`1<=i<=N'.

Mon Aug 10 22:11:50 1992  Michael Meissner  (meissner@osf.org)

	* reload1.c (emit_reload_insns): Use gen_rtx to create a secondary
	reload insn, not gen_reg_rtx.

Mon Aug 10 06:23:23 1992  Torbjorn Granlund  (tege@jupiter.sics.se)

	* pa.md (Recognizer for zdepi_operand in HImode): New pattern.
	(Recognizer for zdepi_operand in SImode): Call output_zdepi for
	output.
	(shift patterns and recognizers): Handle 32 bit ints and truncate
	them for output.
	* pa.c (output_zdepi): New function (contents from pa.md).
	* pa.h (output_zdepi): Declare.

Sun Aug  9 17:10:24 1992  Pat Rankin  (rankin@eql.caltech.edu)

	* configure.com: Rename vms to vax-vms; split long lines.
	* make-l2.com: Assemble libgcc2 routines twice, preserving
	lowercase function names the second time.

Sun Aug  9 00:50:46 PDT 1992  Ron Guilmette  (rfg at netcom.com)

	* final.c (final_scan_insn):  Call dwarfout_begin_block and
	dwarfout_end_block even for -g1.

Sun Aug  9 18:10:33 1992  Michael Meissner  (meissner@osf.org)

	* genflags.c (gen_insn): Treat 'call_pop' and 'call_value_pop' like
	'call' and 'call_insn'.

	* i386.h (LEGITIMIZE_ADDRESS): Emit_move_insn only takes two
	arguments, not three.

Sat Aug  8 10:26:02 1992  Michael Meissner  (meissner@osf.org)

	* cp-tree.h (hash_chainon): Provide declaration.
	(build_virtual_init): Ditto.
	(build_vbase_delete): Ditto.
	(build_vbase_vtables_init): Ditto.

	* genflags.c (insn_name_ptr): Define, so that we can link in
	print-rtl.c for debugging.
	(call_obstack, normal_obstack): New obstacks to remember call
	insns, and normal insns, so that we can emit the prototypes later.
	(max_id_len): New variable to record the maximum identifier
	length.
	(num_operands): New function to return the number MATCH_OPERAND's
	and MATCH_OPERATOR's in an insn tree.
	(gen_proto): New function to print out a prototype for an insn.
	(gen_nonproto): New function to print out a declaration without a
	prototype.
	(gen_insn): Don't emit function declarations here, just save the
	insn on either the call_obstack if it is call or call_value, or
	normal_obstack otherwise.
	(main): Initialize call_obstack, normal_obstack.  After all insns
	are processed, emit function declarations with and without
	prototypes, depending on whether NO_MD_PROTOTYPES, and
	CALL_MD_PROTOTYPES are defined.

	* rtl.h (PROTO): If not defined, define to either expand
	prototypes or just expand to (), depending on whether or not, the
	host compiler supports ANSI C.
	(NULL_PTR): Define as void * if we have prototypes.
	(all function declarations): Add prototypes for all functions
	where it is feasible to do so, using the PROTO macro.
	(force_reg): Add declaration.
	(eliminate_constant_term): Ditto.
	(output_constant_def): If tree.h has been included, add prototype.
	(immed_real_const): Ditto.
	(immed_real_const_1): Ditto.
	(make_tree): Ditto.

	* tree.h (PROTO): If not defined, define to either expand
	prototypes or just expand to (), depending on whether or not, the
	host compiler supports ANSI C.
	(NULL_PTR): Define as void * if we have prototypes.
	(all function declarations): Add prototypes for all functions
	where it is feasible to do so, using the PROTO macro.  Do not
	define prototypes for build_binary_op, or build_indirect_ref,
	since GNU C and GNU G++ have different numbers of arguments.  Do
	not define prototypes for make_tree, since it takes a rtx as the
	argument, and rtl.h is included after tree.h.

Sat Aug  8 07:36:19 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* cp-lex.c: Include stdlib.h and locale.h if needed.
	(errno): Declare only if it isn't a macro.
	* cp-tree.c (__eprintf): `line' is unsigned.
	* cp-typeck.c (mark_addressable): Use DECL_EXTERNAL not TREE_EXTERNAL.

Fri Aug  7 00:16:28 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* gcc.c (read_specs): Cast args of xmalloc and read to unsigned.

	* final.c (final_scan_insn): Use ASM_OUTPUT_ADDR_DIFF_ELT
	and ASM_OUTPUT_ADDR_VEC_ELT only if defined.

Thu Aug  6 22:00:13 1992  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* sched.c (true_dependence): An unchanging read is guaranteed
	independent of a store only if the store is not unchanging.
	(anti_dependence): Added comment about unchanging reads.
	(sched_analyze_2): Don't ignore unchanging reads, they may be
	dependent on unchanging writes.

 	* sparc.md: Correct DEFINE_SPLITs added Jul 27.  They would
	overwrite the input register if it was the same as the result reg.

Thu Aug  6 16:25:48 1992  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* pa.h (ASM_FILE_START): If profiling IMPORT "_mcount" instead of 
	"__gcc_mcount".

	* These changes allow the PA to make use of the BSS subspace.  They
	require you to use the HPUX assembler or a fixed version of pa-gas
	(available soon on jaguar.cs.utah.edu).
	* pa.h (TARGET_SWITCHES): New switch "no-bss" which forces gcc not
	to make use of the bss subspace.  (For compatability with old buggy
	versions of pa-gas.)
	(ASM_FILE_START): Add $BSS$ subspace.
	(BSS_SECTION_ASM_OP): New macro which tells the assembler to switch
	to the bss subspace.
	(EXTRA_SECTIONS): Define in_bss as an extra section.
	(EXTRA_SECTION_FUNCTIONS): Define "bss_section" function to switch
	into the bss subspace.
	(ASM_OUTPUT_COMMON): If !TARGET_NO_BSS, then place commons into the
	bss subspace.
	(ASM_OUTPUT_LOCAL): Likewise.

Thu Aug  6 13:04:16 1992  Tim Moore  (moore@defmacro.cs.utah.edu)

	* gvarargs.h : Check hp800 symbol too for the hppa case.
	* va-pa.h : Rewrite to be compatible with hpux.
	* pa.c (hppa_builtin_saveregs): Rewrite.
	(secondary_reload_class): Bug fix.
	(arith32_operand): New function.

Wed Aug  5 11:23:05 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* m88k.h (EXTRA_SECTIONS, svr3): Delete empty definitions for
	CTORS_SECTION_FUNCTION and DTORS_SECTION_FUNCTION.  Add in_ctors
	and in_dtors.

Tue Aug  4 23:54:15 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* gcc.c (default_compilers): For output of as when -c is not used,
	use %g, rather than %b, because the file is going to be deleted
	anyway.

Tue Aug  4 20:30:12 1992  Michael Meissner  (meissner@osf.org)

	* cp-decl.c (grokdeclarator): Call build_type_variant to set const
	and volatile flags, since build_reference_type does not take those
	arguments.

	* cp-parse.y  (attribute processing): Correctly call tree_cons with
	three arguments, passing NULL_TREE for the chain argument.

	* cp-tree.h (hash_chainon): Add declaration for this function.
	(build_virtual_init): Ditto.
	(build_vbase_delete): Ditto.
	(build_vbase_vtables_init): Ditto.

	* cp-typeck.c (build_modify_expr_1): Pass 0 as third argument to
	build_unary_op.
	(build_modify_expr): Ditto.

Tue Aug  4 18:10:46 1992  Mike Stump  (mrs@wombat.gnu.ai.mit.edu)

	* cp-tree.h, tree.h:  Moved definitions of TREE_VIA_* into tree.h for
	consistency.

Tue Aug  4 17:35:32 1992  Mike Stump  (mrs@albert.gnu.ai.mit.edu)

	Complete 10th FSF <---> Cygnus merge.

	Tue Aug  4 12:58:59 1992  Mike Stump  (mrs@cygnus.com)

	* cp-decl.c (pushtag): Don't set DECL_IGNORED_P for binding
	layer markers, use only DECL_SOURCE_LINE == 0, as otherwise,
	it messes up dbxout.c.

	Tue Aug  4 11:59:36 1992  Mike Stump  (mrs@cygnus.com)

	Tue Aug  4 13:43:55 1992  Chip Salzenberg  (chip@tct.com)

	* cp-method.c (hack_identifier): Remove redundant call of
	assemble_external.

	Tue Aug  4 10:23:02 1992  Chip Salzenberg  (chip@tct.com)

	* cp-decl.c (pushdecl): Any kind of DECL should be good enough
	at global scope, not just a TEMPLATE_DECL.

	Sun Aug  2 21:12:55 1992  david d `zoo' zuhn  (zoo at cirdan.cygnus.com)

	* cp-tree.c: change definition of __eprintf to match libgcc2.c and
	assert.h

	Fri Jul 31 16:53:26 1992  Mike Stump  (mrs@cygnus.com)

	* cp-tree (break_out_calls): Only make ony copy of a node on
	's' and 'e' nodes.  Handle 'r' just like 's' and 'e' because
	nodes of type 'r' can be of different sizes (the old code
	would do the wrong thing for a COMPONENT_REF).

	Thu Jul 30 11:46:14 1992  Michael Tiemann  (tiemann@rtl.cygnus.com)

	* cp-init.c (emit_base_init): Set transparent basetypes (those w/o
	ctors) as marked if we need to walk up the tree to find a ctor.

	Wed Jul 29 03:25:51 1992  Michael Tiemann  (tiemann@rtl.cygnus.com)

	* cp-decl.c (grokdeclarator): In SCOPE_REF case, sort out visibility
	declarations from other declarations, since the compiler will
	ultimately handle them differently.  This is a part of the solution
	to p525.
	(finish_method): Tentative (and probably wrong) fix for carrying
	along inline methods delcared within a class that really belong to
	nested classes of the class.  This may be more of the solution to
	p525.

	* cp-init.c (build_offset_ref): Use IDENTIFIER_TYPE_VALUE of CNAME
	when CURRENT_CLASS_DECL is 0.

	* cp-class.c (finish_struct): Don't give errors for TYPE_DECLs in a
	struct that are really only meant for FIELD_DECLs.

	Tue Jul 28 23:36:58 1992  Mike Stump  (mrs@cygnus.com)

	* cp-decl.c (grok_op_properties):  Do not core dump on parse errors.

	Tue Jul 28 22:43:12 1992  Mark Eichin  (eichin@cygnus.com)

	* cp-pt.c (end_template_instantiation) YYDEBUG is now defined in
	cp-parse.h -- so don't assume that it's -2 (since under byacc it is
	-1 anyway.) iomanip.C compiles again.

	Tue Jul 28 22:33:46 1992  Mike Stump  (mrs@cygnus.com)

	* cp-typeck.c (build_c_cast):  Allow cast to array type in
	some situations to be more compatible with Cfront.

	Tue Jul 28 22:05:14 1992  Mark Eichin  (eichin@cygnus.com)

	* cp-parse.y (print_parse_statistics): don't reference TOKEN_LENGTH
	or REDUCE_LENGTH unless GATHER_STATISTICS is set. (YYDEBUG alone is
	not a sufficient condition.)

	Tue Jul 28 19:18:30 1992  Mike Stump  (mrs@cygnus.com)

	* cp-tree.c (break_out_calls): Don't do anything special to
	SAVE_EXPRs, as they cannot contain calls that would need
	breaking out.  This fixes a problem introduced on Jul 15, by
	Ron Guilmette.

	Mon Jul 27 16:55:52 1992  Mike Stump  (mrs@cygnus.com)

	* c++:  Fix errors introduced by rms.  Bullet-proof handling
	of arguments with funny things in them such as newlines,
	spaces, tabs, single quotes, double quotes, etc...

	Mon Jul 27 15:03:23 1992  Ken Raeburn  (raeburn@cygnus.com)

	* cp-init.c (build_vec_delete): Extract size of type even for
	destructorless types, so value can be computed to pass to delete
	operator.

	* Bludgeon interface/implementation code into leaving templates
	alone, until we've figured out how to handle their interaction
	properly:
	* cp-parse.y (template_instantiate_once): Temporarily set interface
	flags to `unknown' while processing member templates.
	* cp-decl.c (grokfndecl): Even if class vtable is getting written
	out, regardless of interface setting of class and write_virtuals
	flag, don't force virtual destructor of template class to be public.
	* cp-tree.h (struct pending_inline): New field `interface'.
	* cp-lex.c (do_pending_inlines): Restore interface flags from stored
	values, rather than calling extract_interface_info.
	(process_next_inline): Likewise, if more pending inlines exist; else
	do call extract_interface_info.
	(reinit_parse_for_method): Save away interface flags.
	(cons_up_default_function): Ditto.
	* cp-pt.c (instantiate_template): Set saved interface flag to
	`unknown'.
	(end_template_instantiation): Set CLASSTYPE_INTERFACE_UNKNOWN.

	* cp-pt.c (instantiate_member_templates): Deleted some unused code.

	* cp-decl.c (grokfndecl): Make class methods public if
	`implementation' pragma is set.

	* cp-pt.c (pending_templates): No longer exported.
	(add_pending_template): Ditto.
	* cp-parse.y (primary): Don't check it; always call
	do_pending_templates.

	Fri Jul 24 14:22:39 1992  Mike Stump  (mrs@cygnus.com)

	* cp-decl.c (init_decl_processing, finish_function),
	cp-method.c (build_decl_overload, build_opfncall), cp-init.c
	(build_x_delete, build_delete, build_vec_delete):  Add support
	for two argument delete to support ARM 12.5.  In some cases,
	the argument is smaller than it should be.

	Thu Jul 23 08:12:16 1992  Mike Stump  (mrs@cygnus.com)

	* cp-lex.c:  Update wide character handling from c-lex.c and make
	the type of multicharacter constants be int per ANSI C++ WP.

	* cp-decl.c (init_decl_processing, grokdeclarator), cp-lex.h,
	gplus.gperf, cp-lex.c (init_lex), cp-decl2.c (groktypefield),
	cp-method.c (build_overload_name): Add support for wchar_t as a
	distinct type to conform to x3j16 working paper.
	* cp-hash.h: Regenerated.

	Wed Jul 22 17:41:08 1992  Mark Eichin  (eichin@cygnus.com)

	* cp-parse.y (structsp): note_got_semicolon was called before
	finish_struct (which always clears the got_semicolon bit.) However,
	note_got_semicolon was only called if yychar==';', without checking
	for YYEMPTY.

	Tue Jul 21 22:59:32 1992  Michael Tiemann  (tiemann@rtl.cygnus.com)

	* cp-typeck.c (mark_addressable): If we have a recursive call to an
	otherwise inline function, clear TREE_EXTERNAL so the whole function
	is written to the asm file.

	Tue Jul 21 05:31:10 1992  Ken Raeburn  (raeburn@cygnus.com)

	* cp-tree.h (start_type_method): Deleted unused declaration.

	* cp-pt.c (tsubst): Fix propagation of qualifiers in several cases.

	* cp-pt.c (tsubst, case FUNCTION_DECL): Look for matches that differ
	only in return type.

	* cp-pt.c (tsubst, case FUNCTION_DECL): Rewrite name of
	type-conversion operators, in case the target type involves a
	template parameter.

	Mon Jul 20 03:35:44 1992  Michael Tiemann  (tiemann@rtl.cygnus.com)

	* cp-class.c (add_virtual_function): Don't crash if
	CURRENT_CLASS_TYPE is NULL_TREE.
	* cp-decl2.c (grokfield): Ditto.

Tue Aug  4 15:36:07 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-decl.c (finish_decl): Don't do expand_decl_init for FUNCTION_DECL.

	* c-typeck.c (build_conditional_expr): Merged const and volatile flags
	of incoming types.

Tue Aug  4 11:15:47 1992  Chip Salzenberg  (chip@tct.com)

	* c-decl.c (finish_struct):  If bit field is of an unsigned
	type that promotes to int, promote it unsigned if traditional
	or if it is the same size as int.
	(start_function):  Ditto for function return value.
	* c-typeck.c (default_conversion):  Ditto -- fix bug that
	promotes short to unsigned if sizeof(short) == sizeof(int).

Tue Aug  4 15:12:51 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* svr3.h (USING_SVR3_H): Define.
	* svr4.h (USING_SVR4_H): Define.
	* aoutos.h (USING_AOUTOS_H): Define.
	* m88k.h (EXTRA_SECTIONS): Base on the above defines.

Tue Aug  4 14:22:44 1992  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* dbxout.c: Include output.h.

Tue Aug  4 00:21:06 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Makefile.in (install-common): Install protoize and related files
	if they were compiled.
	(install-proto): Target deleted.
	(dbxout.o): Depend on output.h.

Mon Aug  3 02:04:03 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-decl.c (finish_function): Test only can_reach_end for the warning
	about reaching the end of a non-void function.
	(poplevel): If apparently nested inline function has
	DECL_ABSTRACT_ORIGIN, don't output it; propagate TREE_ADDRESSABLE.
	(pushdecl): When copying inline details into an extern decl,
	copy DECL_RESULT, TREE_ASM_WRITTEN.  Set DECL_ABSTRACT_ORIGIN.

	* c-parse.y (datadef): For empty declaration, use pedwarn.
	* objc-parse.y (datadef, mydecl): Likewise.

	* Makefile.in (install-cross-tools): Install nm from tooldir.

	* varasm.c: Include real.h.
	* sparcv4.h: Don't include real.h.

	* flow.c (mark_used_regs): Do recurse in setting of global hard reg.
	Do set reg_next_use for global hard reg.

	* objc-parse.y (reserved_declspecs, declmods): Change as in c-parse.y.

Mon Aug  3 03:24:17 1992  Paul Eggert  (eggert@twinsun.com)

	* c-parse.y (reserved_declspecs): Warn if storage class occurs here.
	(declmods): Warn if storage class is not first.

Sun Aug  2 21:44:34 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* emit-rtl.c (gen_rtx, case REG): Don't use frame_pointer_rtx or
	arg_pointer_rtx if reload is in progress.

	* jump.c (jump_optimize): When replacing jumps with logical
	expressions, use preserve_subexpressions_p.

	* calls.c (expand_call): Use HOST_WIDE_INT instead of int when
	comparing a pointer to an integer constant.
	* flow.c (find_use_as_address): Likewise; also when returning int.
	* integrate.c (expand_inline_function): Cast -1 to (HOST_WIDE_INT)
	first.

	* cse.c (canon_hash): Use HOST_WIDE_INT instead of int when casting
	pointers to integers.
	* print-tree.c (print_node): Likewise.
	* tree.c (TYPE_HASH): Likewise.
	* varasm.c (const_hash, SYMHASH): Likewise.

	* toplev.c: (main): Don't cast pointers to int unnecessarily.

	* tree.c: Include function.h after tree.h.

	* rtl.h (NOTE_BLOCK_NUMBER): Change definition to simpler form.
	(SET_NOTE_BLOCK_NUMBER): Deleted.
	(xrealloc, oballoc, permalloc): Declare here as well as in tree.h.
	* function.c (identify_blocks, reorder_blocks): Don't use
	SET_NOTE_BLOCK_NUMBER.

	* varasm.c (struct addr_const): Use HOST_WIDE_INT for OFFSET.

	* combine.c (reg_sign_bit_copies): New variable.
	(combine_instructions): Initialize it.
	(set_significant): Set it.
	(try_combine): Set subst_low_cuid immediately before calling `subst'
	to the INSN_CUID of the lowest insn involved in the call.
	Change XOR with out-of-range constant to (not (xor ...)).
	Call both split_insns and find_split_point; pass extra parm to
	find_split_point.
	Record I2DEST's value if I2 now sets it; similarly for I1DEST.
	(find_split_point): Add new arg INSN.
	If AND'ing with a large single-bit constant and we only care about
	equality with zero, replace with bit extraction.
	Make two shifts for ZERO_EXTRACTs unless very narrow.
	(subst): Move RESTART label earlier.
	If we have a simple operation applied to IF_THEN_ELSE, move
	the operation inside the two arms.
	(subst, case SUBREG): Use force_to_mode.
	(subst, case NOT): Change (not (xor X C)) to (xor X ~C).
	(subst, case NEG): Remove optimization of (neg (abs X)); redundant.
	Convert (neg (xor A 1)) to (plus A -1) if A is known to be 0 or 1.
	(subst, case IF_THEN_ELSE): Simplify if an arm contains a register
	being tested by substiting the known value.
	Put constant integer in last arm is can reverse comparison.
	(subst, case SET): Use gen_lowpart_for_combine.
	(subst, case AND): Make IF_THEN_ELSE when appropriate.
	(subst, case IOR): (ior A C) can sometimes be just C.
	(subst, case XOR): Go back and restart when canonicalizing.
	(subst, case ABS): Use num_sign_bit_copies.
	(make_extraction): Call force_to_mode.
	(make_compound_operation): Look at optabs rather that explicitly
	checking for operations and assuming we have SImode.
	Handle (ashiftrt (OP (ashift foo C1) C3) C2).
	(force_to_mode): Only change mode of arithmetic if optab says we
	have operation in that mode.
	Remove unneeded ASHIFTRT; add handling for IF_THEN_ELSE.
	(significant_bits, case NEG): Call num_sign_bit_copies.
	(significant_bits, case ABS, case [US]{MIN,MAX}, IF_THEN_ELSE): New.
	(num_sign_bit_copies): New function.
	(simplify_shift_const): Remove ASHIFTRT if value is known -1 or 0.
	Use num_sign_bit_copies to simplify (ashiftrt (ashift ...) ...)
	and (ashiftrt (neg ...) ...).
	Remove now redundant case when VAROP is a PLUS.
	(simplify_comparison): If A is known to be -1 or 0, A != -1 is A == 0.
	Simplify unsigned tests that really check the sign bit.
	(simplify_comparison, case ASHIFTRT): Convert to LSHIFTRT if 
	equality comparison with zero.
	(get_last_value): Check if the desired register is set in the
	insn before the one whose INSN_CUID is subst_low_cuid.

	* expr.c (expand_builtin, case BUILT_IN_CONSTANT_P): Add missing
	call to TREE_CODE.

	* reload1.c (reload): Set reload_in_progress earlier.

	* fold-const.c (optimize_bit_field_compare): Correct bogus use of
	types in expressions; always do computation in a type wide enough
	for the result.

Sun Aug  2 01:30:22 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* objc-parse.y (attrib): Copied from c-parse.y.

Sat Aug  1 13:34:49 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-pragma.c (HANDLE_PRAGMA_WEAK): Define only if SET_ASM_OP defined.

	* vax-vms.h: Renamed from vms.h.
	* xm-vax-vms.h: Renamed from xm-vms.h.
	* configure (vax-*-vms): Change file names.

Sat Aug  1 16:13:09 1992  Mark Eichin  (eichin@cygnus.com)

	* config/spc-sol2.h (ASM_OUTPUT_DWARF_STRING): redefinition was
	incorrect, and uneeded; while Solaris as doesn't support .string, it
	does support .asciz, and sparcv4.h takes care of including that
	definition.

Fri Jul 31 08:19:41 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu

	* combine.c (try_combine): Correctly handle implicit deaths of
	I2DEST and I1DEST.

	* cexp.y: Add declaration for xmalloc.

	* cccp.c: Add declarations for malloc and realloc.
	Include stddef.h when __STDC__ is defined.
	(PTR_INT_TYPE): New macro.
	(pcfinclude): Use it.

	* c-decl.c (init_decl_processing): __builtin_return_address,
	__builtin_frame_address, and __builtin_saveregs all return void *.

	* reload.c (find_reloads_address_1): Convert another push_reload
	call into a call to find_reloads_address_part.

	* reload1.c (gen_input_reload): Correct order of insns emitted
	when using secondary memory.

	* reload1.c (reload_as_needed): Add missing semicolon after macro.

	* combine.c (distribute_notes, case REG_DEAD): If a register used
	exactly twice is referenced in both I2 and I3, show it is used 3 times.

	* final.c (output_operand): Abort if X is a pseudo.

	* cse.c (exp_equiv_p, case CONST_INT): Use INTVAL instead of XINT.

	* expr.c (convert_move): Put FROM into a register if it is a SUBREG.
	(For extension case.)

Fri Jul 31 08:19:05 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* function.c (reposition_prologue_and_epilogue_notes): Search for
	the notes without using basic_block_end[0] or basic_block_head[N-1].

Fri Jul 31 08:18:18 1992  Michael Meissner  (meissner@osf.org)

	* reorg.c (get_branch_condition): Return 0 if all tests fall through.

Fri Jul 31 02:28:02 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* glimits.h: Renamed from limits.h.
	* Makefile.in (LIMITS_H): Deleted.
	(install-limits-h): Use glimits.h, not limits.h.
	* libgcc2.c: Include glimits.h.

Thu Jul 30 09:54:07 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* m88k.h (FUNCTION_BOUNDARY, ASM_OUTPUT_ALIGN_CODE): Pack code
	more tightly for the m88110.

	* m88k.md (cpu attribute): List m88100 first for more efficient
	code in insn-attrtab.c.

	* m88k.md (rotate/and split pattern): Fix typo.

Thu Jul 30 00:02:45 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* i860mach.h: New file.
	* configure (i860-*-mach*): New alternative.

	* svr3.h (BSS_SECTION_FUNCTION): New macro.
	(CTORS_SECTION_FUNCTION, DTORS_SECTION_FUNCTION): Enable these.
	* tower-as.h (BSS_SECTION_FUNCTION): Deleted.
	* dpx2.h (EXTRA_SECTION_FUNCTIONS): Deleted.
	* att386.h (BSS_SECTION_FUNCTION): #undef before defining.

	* i860v3.h (USE_CONST_SECTION): #undef before defining.

Wed Jul 29 20:04:55 1992  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* sparc.md (cmpsi): Delete 'J' constraint.

Wed Jul 29 00:38:45 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-lex.c (yylex): When traditional, convert 0x80000000 to -0x80000000.

	* gcc.c (link_command_spec): Accept -static but do nothing with it.

	* loop.c (move_movables): When testing whether a reg contains
	the function address of a call_insn in a libcall block,
	use reg_referenced_p, to ignore destinations.

	* stor-layout.c (layout_record): Take account of
	maximum_field_alignment when using the field's alignment.

	* c-parse.y (attrib): Fix previous change--the missing arg
	was the last arg.

	* fixincludes: Don't repeat the directory-link-chasing loop
	more than twice.  Combine $prevdirs with $dirs--they had same value.
	Properly discard $d itself from the output of find.
	Find the links to directories by finding each link
	and testing it with test.  Add $newdirs into $files.

Tue Jul 28 12:46:31 1992  Michael Meissner  (meissner@osf.org)

	* c-common.c (decl_attributes): Call layout_decl with two arguments.

	* c-parse.y (attribute processing): Correctly call tree_cons with
	three arguments, passing NULL_TREE for the purpose argument.

	* emit-rtl.c (make_insn_raw): Eliminate unused argument pat_formals,
	and modify all callers.
	(make_jump_insn_raw): Ditto.

	* reorg.c (fill_slots_from_thread): Function follow_jumps only takes
	one argument.
	(relax_delay_slots): Ditto.

Tue Jul 28 16:04:43 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* dpx2g.h (ASM_OUTPUT_IDENT): #undef it.

	* c-decl.c (duplicate_decls): Handle warn_redundant_decls here.
	But don't warn if function definition follows a declaration.
	(pushdecl): Don't handle it here.
	(grokparms): Don't warn about non-prototype decl in system header.

	* c-convert.c (convert): If main variants match, 
	but the type is not identical, make a NOP_EXPR.

Tue Jul 28 10:06:18 1992  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* mips.md: Correct use of `*' in constraints.  Put it before each
	letter to ignore, not each group to ignore.

Tue Jul 28 01:23:35 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* dbxout.c (dbxout_parms): Do something for structures
	passed by invisible reference, and living in memory.

	* gstddef.h (wchar_t): Alternate typedef for C++.

	* Makefile.in (extraclean): Delete config/ChangeLog.

	* m68k.md (probe): Use %a0 to output the address.

Mon Jul 27 20:08:21 1992  Mike Stump  (mrs@hal)

	* c++:  Fix errors introduced by rms.  Bullet-proof handling of
	arguments with funny things in them such as newlines, spaces, tabs,
	single quotes, double quotes, etc...

Mon Jul 27 17:38:52 1992  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* sparc.md: Add DEFINE_SPLITs to optimize logic operation with
	certain immediate values.

	* sparc.md: Correct inconsistent operand constraints in peepholes.

	* sparc.h (ASM_LONG, ASM_SHORT, ASM_BYTE_OP):  Definitions added.
	(ASM_OUTPUT_DOUBLE):  Use REAL_VALUE_TO_TARGET_DOUBLE to convert.
	(ASM_OUTPUT_FLOAT):  Use REAL_VALUE_TO_TARGET_SINGLE to convert.
	(ASM_OUTPUT_INT):  Use ASM_LONG pseudo-op.
	(ASM_OUTPUT_SHORT):  Use ASM_SHORT pseudo-op.
	(ASM_OUTPUT_CHAR):  Use ASM_BYTE_OP pseudo-op.
	(ASM_OUTPUT_BYTE):  Use ASM_BYTE_OP pseudo-op.

Mon Jul 27 17:10:19 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* gstdarg.h (va_arg): Don't use +=; no need to set AP twice.

Sun Jul 26 14:21:13 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* final.c (final_scan_insn): Align jump table only if
	READONLY_DATA_SECTION.  Otherwise, the table is in the text section.

	* collect2.c (dup2): Defined, if NO_DUP2.

	* plexus.h: New file.
	* m68k.c (output_function_prologue): Make a probe instruction
	if NEED_PROBE if nonzero.
	* configure (m68k-plexus-sysv*): New alternative.

	* c-convert.c (convert): Succeed if TYPE is the main variant
	of the given type.
	* c-typeck.c (build_conditional_expr): Compare using TYPE_MAIN_VARIANT.

	* c-decl.c (duplicate_decls): Copy old RTL *before* make_var_volatile.

Sat Jul 25 21:45:44 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-decl.c (pushdecl): Never reuse global fcn decl in place of
	local extern; just copy some info from it.

Sat Jul 25 06:14:58 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* expmed.c (expand_divmod): Eliminate the generation of branches
	when possible.

Sat Jul 25 04:34:09 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* fixincludes (X11/Xmu/Xmu.h): Fix this or X11/Xmu.h,
	whichever exists.

Sat Jul 25 00:41:12 1992  Paul Eggert  (eggert@twinsun.com)

	* c-parse.y (datadecl): Diagnose empty declarations in old-style
	function headers.
	* c-decl.c (shadow_tag_warned): New function.

	* c-lex.c (yylex): Diagnose `1.0fl'.  Issue just one
	diagnostic for `1e1000000f'.

Fri Jul 24 19:25:51 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* dbxout.c (dbxout_symbol): Distinguish implicit C++ typedefs
	from explicit C typedefs for structs, using DECL_SOURCE_LINE.

	* c-decl.c (duplicate_decls): Use TYPE_MAIN_VARIANT even for compares
	with void_type_node.
	(grokdeclarator, get_parm_info, store_parm_decls): Likewise.

Fri Jul 24 10:07:13 PDT 1992  Ron Guilmette (rfg at ncd.com)

	* dwarfout.c (is_tagged_type):  New function added.
	(member_attribute):  Use it.
	(type_ok_for_scope):  Rewritten to eliminate serious bugs.
	(output_type):  Call `output_pending_types_for_scope' at the end of
	struct/union types (which are themselves scopes in C++).

Fri Jul 24 13:36:46 1992  Michael Meissner  (meissner@osf.org)

	* dbxout.c (toplevel): Include defaults.h to get the definition of
	ASM_STABD_OP.

	* Makefile.in (dbxout.o): Add defaults.h dependent.

	* i386rose.h (CC1_SPEC): Remove MIPS switches accidently left in.

Thu Jul 23 09:49:43 PDT 1992  Ron Guilmette  (rfg at ncd.com)

	* dwarfout.c (is_body_block):  Rewritten for greater saftey.
	(output_block):  Fixed to deal correctly with non-inlined blocks.

Thu Jul 23 15:37:23 1992  Jeffrey A Law  (law at schirf.cs.utah.edu)

	* flow.c (propagate_block): Change "struct foo" to "struct sometimes".

Thu Jul 23 15:10:51 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* m88k.h (ASM_OUTPUT_CASE_LABEL): Change to readonly section if the
	table contains addresses.
	(JUMP_TABLES_IN_TEXT_SECTION): True by default.

Thu Jul 23 13:54:27 1992  Michael Meissner  (meissner@osf.org)

	* mips.c (large_int): Use HOST_WIDE_INT type to hold INTVAL.
	(gen_int_relational): Ditto.
	(gen_conditonal_branch): Don't emit any insns if the result is
	always false, and emit a normal jump if the result is always true.

	* mips.c (mips_move_1word): Count LABEL_REF's as a memory
	reference.  Rework half-pic load of symbols, to not expect movsi
	to have converted the load address into a load, and for CONST's,
	do the addition after the pointer is loaded.

	* mips.md (type attribute, movsi3): Eliminate 'pic' attribute,
	just use 'load' instead.
	(fix_truncdfsi2): Make this a define_insn, instead of a
	define_exapnd and an insn, and use match_scratch to allocate the
	two scratch registers.  Adjust length costs, so that they match
	the current code the assembler produces.
	(fix_truncsfsi2): Ditto.
	(movsi): Don't convert load of half-pic addresses and CONST's into
	the real load.  It causes more problems than it solves.  Adjust
	cost of half-pic addresses to be 2, not 4.

	* mips-tfile.c (parse_def): Allow spaces in names, since C++
	templates produce things like: #.def SMANIP<long unsigned int>; ...
	(parse_stabs_common): Code from Lisa Repka, to handle symbol +/-
	offset, and to look up things in the external string table, if the
	name is not found in the local string table.

Wed Jul 22 13:08:33 1992  Jeffrey A. Law  (law@schirf.cs.utah.edu)

	* sparc.md (movdf+1): Use new 'T' and 'U' constraints to 
	determine when an ldd or std will have a length of 1, and
	therefore is eligible for use in some delay slots.
	(uncond_branch): New attribute used for unconditional branches.
	All unconditional branch patterns changed.
	(define_delays and delay slot attributes): Do not allow
	uncond_branch instructions in delay slots.  Do not allow fpload or
	fpstore operations in a conditional branch delay slot.  Allow 
	fpload and fpstore in call, unconditional branch, and annuled
	conditional branch delay slots.
	
	* sparc.c (registers_ok_for_ldd_peep, addrs_ok_for_ldd_peep):
	Functions renamed from registers_ok_for_ldd and
	memory_ok_for_ldd respectively.  All callers changed.
	(register_ok_for_ldd): New function to determine if a register is
	a pseudo or the first register in a hard register pair.
	(mem_aligned_8): No longer static.  Return 0 instead of aborting
	when presented an rtx which is not a MEM.
	(eligible_for_epilogue_delay): Use in_uncond_branch_delay since
	this in an unconditional branch.
	
	* sparc.h (EXTRA_CONSTRAINT) Add new 'T' and 'U' constraints
	which check for aligned accesses to memory and register pairs.

Wed Jul 22 11:22:37 1992  Michael Meissner  (meissner@osf.org)

	* mips.h (MIPS_VERSION): Bump meissner version number to 22.
	(extern declarations): Add declarations for asm_file_name,
	call_used_regs, langguage_string, save_argv, version_string,
	mips_{begin,end,expand}_{pro,epi}logue, simple_epilogue_p,
	{address,const_{double,int},general,{,non}immediate}_operand,
	memory_address_p, {{,non}memory,register,scratch}_operand,
	abort_with_insn, debug_rtx, fatal_io_error, get_frame_size,
	offsettable_address_p, output_address, permalloc,
	reg_mentioned_p, abort, atoi, getenv, mktemp, and
	mips_expand_{epi,pro}logue.
	(*_REGNUM): Add in GP_REG_FIRST in case registers are ever
	renumbered.
	(struct mips_frame_info): Add num_gp, num_fp fields.
	(SECONDARY_MEMORY_NEEDED): Define, return 1 unless -mdebugh if
	moving between FP <-> GP registers.

	* mips.c (extern declarations): Move most of the declarations to
	mips.h, except for those of type 'rtx' or 'tree', since not all
	files include rtl.h and tree.h.  Add more declarations for gen_xxx
	functions that are now used.
	(reg_or_0_operand): Add default case for switch on enumeration, to
	allow compiling with -Wall.
	(simple_memory_operand): Ditto.
	(mips_count_memory_refs): Ditto.
	(mips_move_1word): Ditto.
	(mips_move_2words): Ditto.
	(mips_address_cost): Ditto.
	(map_test_to_internal_test): Ditto.
	(mips_move_1word): Align asm comments in loading negative ints.
	(mips_move_1word): Use GEN_INT macro to generate CONST_INT's.
	(mips_move_2words): Ditto.
	(gen_int_relational): Ditto.
	(block_move_load_store): Ditto.
	(block_move_loop): Ditto.
	(expand_block_move): Ditto.
	(block_move_load_store): #if 0, not currently used.
	(block_move_sequence): Ditto.
	(compute_frame_size): Fill in num_gp and num_fp fields.
	(simple_prologue_p): Rename from null_prologue.
	(save_restore_insns): New function to emit appropriate save and
	restore operations for prologue/epilogue -- only prologue used at
	present.
	(function_prologue): Move generation of instructions to
	mips_expand_prologue.
	(mips_expand_prologue): Generate appropriate insns for the
	prologue of the function.
	(mips_expand_epilogue): Generate appropriate insns for the
	epilogue of the function -- not called at present.

	* mips.md (ashldi3_internal): Add `&' constraint to operand 0.
	(ashrdi3_internal): Add `&' constraint to operand 0.
	(return): Turn this into a define expand that wraps a return and a
	USE reg:31 inside of a parallel.
	(return_internal): Insn form of return instruction.
	(prologue): New define expand to generate the necessary
	instructions for the function prologue.
	(mov{si,hi,qi}): Split the integer move INSNs into two groups,
	those that support -mdebugh and allow ints to be in floating
	point registers, and those that don't allow it.

Tue Jul 21 21:27:43 1992  Mike Stump  (mrs@albert.gnu.ai.mit.edu)

	* Complete 9th Cygnus <---> FSF merge.

	Tue Jul 21 03:17:05 1992  Mark Eichin  (eichin@cygnus.com)

	* cp-lex.c (process_next_inline): when bailing out on a parse error,
	throw away nextchar as well in case it got set. 

	Tue Jul 21 05:31:10 1992  Ken Raeburn  (raeburn@cygnus.com)

	* cp-pt.c (tsubst, case FUNCTION_DECL): If the context class has a
	null method vector, don't look inside it for its size.

	Thu Jul 16 16:02:55 1992  Per Bothner  (bothner@rtl.cygnus.com)

	* cp-typeck.c (convert_for_assignment):  If assigning (void*)
	to a normal pointer, emit a warning, not an error.  There is
	a lot of existing code (including libg++ and converted C
	code) that expects to be able to assign from (void*).

	Tue Jul 14 06:59:38 1992  Michael Tiemann  (tiemann@rtl.cygnus.com)

	* cp-decl.c (finish_function): Call destructors correctly when
	baseclasses are replicated in the inheritance hierarchy.

	Mon Jul 13 05:16:10 1992  Michael Tiemann  (tiemann@rtl.cygnus.com)

	* cp-typeck.c (build_modify_expr): If we split a COND_EXPR in order
	to perform the assignment in each arm, convert the rhs of each
	branch according to RESULT_TYPE.

	* cp-typeck.c (convert_for_assignment): Treat null_pointer_node
	specially when converting to non-void pointers.

	* cp-class.c (modify_vtable_entries): In the loop that modifies
	vtable entries for each non-virtual baseclass, correctly handle
	cases where BASE is an ambiguous baseclass for BASE_CONTEXT.

	Sun Jul 12 01:32:31 1992  Mike Stump  (mrs@cygnus.com)

	Wed May 27 01:33:24 1992  Ron Guilmette  (rfg at ncd.com)

	* cp-type2.c (store_init_value), cp-typeck.c
	(build_modify_expr, convert_arguments,
	build_binary_op_nodefault, convert_for_assignment), cp-parse.y
	(member_init, template_def, datadef, stmt): changed some
	pedantics into !traditionals and reworded error messages.

	Sun Jul 12 01:11:53 1992  Mike Stump  (mrs@cygnus.com)

	Jul 1992  Ron Guilmette  (rfg at ncd.com)

	* cp-decl.c (finish_function): Set BLOCK_SUPERCONTEXT for the
	outermost scopes of functions to point to the associated
	FUNCTION_DECL nodes.

	Fri Jul 10 17:52:36 1992  Ken Raeburn  (raeburn@cygnus.com)

	* cp-decl.c (struct binding_level): New field pseudo_global
	indicates that this binding level should be treated like the global
	binding level in some respects.
	(declare_pseudo_global_level, pseudo_global_level_p): Set and test
	routines.
	(push_overloaded_decl): Don't forget overloads in pseudo-global
	binding levels.
	* cp-pt.c (tsubst, case FUNCTION_DECL): Search for an existing decl
	before creating a new one.
	(overload_template_name): Make new level pseudo-global.
	(type_unification): Indicate failure for unknown_type_node.
	(unify): Likewise.

	Wed Jul  8 01:59:03 1992  Mike Stump  (mrs@cygnus.com)

	* cp-decl.c (lookup_name, grokvardecl, grokdeclarator),
	cp-call.c (build_field_call), cp-seach.c (lookup_field),
	cp-typeck.c (build_component_ref), cp-lex.c (do_identifier),
	cp-init.c (expand_member_init, build_member_call,
	build_offset_ref):  lookup_field now has 4 arguments.

	Wed Jul  8 01:14:43 1992  Mike Stump  (mrs@cygnus.com)

	* cp-parse.y (primary): Call to lookup_name needs 2 arguments.

	Tue Jul  7 21:14:05 1992  Mike Stump  (mrs@cygnus.com)

	* cp-method.c (build_overload_name): Handle INTEGER_TYPEs
	cleanly and uniformly.	

	Tue Jul  7 09:19:52 1992  Michael Tiemann  (tiemann@rtl.cygnus.com)

	* cp-call.c (build_method_call): If `convert_to_pointer' returns
	error_mark_node, return that without doing any more work.

	Thu Jul  2 15:42:28 1992  Mike Stump  (mrs@cygnus.com)

	Thu Jul  2 18:08:42 1992  Chip Salzenberg  (chip at tct.com)

	* cp-typeck.c (convert_arguments): Don't assume that error
	message will be short enough for fixed-length buffer.

	Wed Jul  1 19:52:59 1992  Mike Stump  (mrs at cygnus.com)

	Wed Jun  3 12:57:57 1992  Brendan Kehoe  (brendan@cs.widener.edu)

	* cp-decl2.c (grokbitfield): Only do width checking on properly
	parsed bitfields.

	Wed Jul  1 18:58:17 1992  Mike Stump  (mrs at cygnus.com)

	Wed May 27 01:33:24 1992  Ron Guilmette  (rfg at ncd.com)

	* cp-lex.c (readescape), cp-parse.y (unary_expr, maybecomma_warn,
	component_decl_list, stmt), cp-type2.c (digest_init), cp-typeck.c
	(c_sizeof, build_function_call_real, convert_arguments,
	build_binary_op_nodefault, pointer_int_sum, pointer_diff,
	build_unary_op, c_expand_return): change some warnings to
	pedwarns.  Put in new pedwarns, change wording of messages so that
	they are more readable.  Don't issue some warnings when
	traditional is given.

	Wed Jul  1 13:56:30 1992  Mike Stump  (mrs at cygnus.com)

	Wed Apr 29 23:37:00 1992  Niklas Hallqvist  (niklas at appli.se)

	* cp-decl.c (finish_decl): make sure destructors are called for
	objects in a file.

	Wed Jul  1 11:12:05 1992  Mike Stump  (mrs at cygnus.com)

	* cp-lex.c: extract YYEMPTY out of the parser generated .c
	file and put in the parser .h so that cp-lex.c does not have
	to define it.

	Mon Jun 29 12:58:59 1992  Mike Stump  (mrs at cygnus.com)

	Mon Jun 29 15:20:48 1992  Chip Salzenberg  (chip at tct.com)

	* cp-cvt.c (convert_to_integer): Don't add a NOP_EXPR in cases
	where we can simply change the type of the entire tree.

	Mon Jun 29 10:56:56 1992  Mike Stump  (mrs at cygnus.com)

	* c++: Makes sure -lg++ comes before -lm since libg++ uses
	things from libm.

	Mon Jun 22 13:47:42 1992  Mike Stump  (mrs at cygnus.com)

	Sun Jun 21 14:06:41 1992  Brendan Kehoe  (brendan at cs.widener.edu)

	* cp-typeck.c (convert_for_initialization): Only try to convert a
	rhs that was parsed properly.

	Mon Jun 22 13:31:40 1992  Jim Wilson  (wilson at sphagnum.cygnus.com)

	* cp-parse.y (primary): Clear the TREE_USED flag of a block tree
	put in a BIND_EXPR.

	Sun Jun 21 09:59:58 1992  Michael Tiemann  (tiemann at rtl.cygnus.com)

	* cp-type2.c (build_scoped_ref): Use SCRATCH for head of typelist,
	rather than calling alloca.

	Fri Jun 19 16:23:02 1992  Mike Stump  (mrs at cygnus.com)

	* cp-pt.c (unify): Type unification of things that do not have a
	valid IDENTIFIER_TEMPLATE fail instead of core dumping.	

	Wed Jun 17 13:36:04 1992  Michael Tiemann  (tiemann at rtl.cygnus.com)

	* cp-pt.c (tsubst): Don't try to substitute into error_mark_node.

	* cp-decl.c (grokparms): Convert initializers that have
	TREE_READONLY_DECL_P set into their constant equivalents.

	Tue Jun 16 19:09:23 1992  Mike Stump  (mrs at cygnus.com)

	Wed Jun  3 12:57:57 1992  Brendan Kehoe  (brendan at cs.widener.edu)

	* cp-decl.c (grokdeclarator): Disallow virtual functions in unions.

	Tue Jun 16 18:11:45 1992  Mike Stump  (mrs at cygnus.com)

	Wed Jun  3 12:57:57 1992  Brendan Kehoe  (brendan at cs.widener.edu)

	* cp-class.c (finish_struct): Forbid local classes to have static
	members.

	Mon Jun 15 21:44:08 1992  Mike Stump  (mrs at cygnus.com)

	Tue Jun  2 09:26:34 1992  Brendan Kehoe  (brendan at cs.widener.edu)

	* cp-init.c (build_new): Don't allow the use of new on a reference.

	Mon Jun 15 20:52:08 1992  Mike Stump  (mrs at cygnus.com)

	Tue Jun  2 09:26:34 1992  Brendan Kehoe  (brendan at cs.widener.edu)

	* cp-decl.c (grokparms): Don't allow a local variable to be used
	in a default argument expression.

	Mon Jun 15 18:54:28 1992  Mike Stump  (mrs at cygnus.com)

	* cp-decl.c (finish_decl): Add an error message for uninitialized
	const objects like const int a;.

	Mon Jun 15 16:05:22 1992  Mike Stump  (mrs at cygnus.com)

	Not sure if it is strictly necessary for the C++ front end, but...

	Sun May 31 15:31:46 1992  Brendan Kehoe  (brendan at cs.widener.edu)

	* cp-typeck.c (self_promoting_args_p): Allow the arg type to be
	null (copied from Oct 16, 1991 change by Wood).

	Fri Jun 12 16:42:05 1992  Mike Stump  (mrs at cygnus.com)

	* cp-typeck.c (build_binary_op_nodefault): Conditionalize code that 
	deals with the comparison of non-distinct object types, thus avoiding
	a core dump.

	Fri Jun 12 10:23:17 1992  Mike Stump  (mrs at cygnus.com)

	Wed Jun 10 19:20:29 1992  Brendan Kehoe  (brendan at cs.widener.edu)

	* cp-tree.c (break_out_calls): Begin at 1 less than the length of
	the length of the tree code, not the length itself, for generic
	expressions and those with side-effects.

	Thu Jun 11 17:43:55 1992  Mike Stump  (mrs at cygnus.com)

	* cp-init.c (expand_default_init): New function to handle the
	details of default copy constructors and other magic in one place.

	* cp-init.c (expand_aggr_init_1): Implement default constructors
	more fully.

	Thu Jun 11 17:16:54 1992  Mike Stump  (mrs at cygnus.com)

	* cp-call.c (build_method_call): Don't produce an error message if
	we are looking up things speculatively.

	Thu Jun 11 10:58:47 1992  Mike Stump  (mrs at cygnus.com)

	* cp-call.c (convert_harshness): Penalize const arguments passed
	into non-const parameters.

	Thu Jun 11 10:02:52 1992  Mike Stump  (mrs at cygnus.com)

	* cp-typeck.c (build_c_cast): Implement more reference casts so
	that one can cast a base reference to a derived reference.

Tue Jul 21 15:28:36 1992  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* sparc.h (SECONDARY_MEMORY_NEEDED): Define to force reload to 
	handle any copy between GENERAL_REGS and FP_REGS.  

	* sched.c (schedule_block): Give some insns high priorities,
	instead of excluding them from scheduling, to ensure that they end
	up at the end of the block after scheduling.

	* i960.c (i960_output_ldconst): Use REAL_VALUE_FROM_CONST_DOUBLE
	instead of pointer indirection to extract double from CONST_DOUBLE.

Tue Jul 21 14:05:34 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* svr4.h (HANDLE_SYSV_PRAGMA): Defined.

	* sol-crt*.asm: Renamed from sol-crt*.s, and put in config.
	* t-sol2 (crt*.o): Changed accordingly.  Also use $(AS).

	* gbl-ctors.h (ON_EXIT): Test HAVE_ATEXIT before sun.

Mon Jul 20 18:56:02 1992  Fred Fish  (fnf at fishpond)

	* svr4.h (ASM_OUTPUT_BEFORE_CASE_LABEL): New macro--default definition.
	(ASM_OUTPUT_CASE_LABEL): Use that.
	* m68ksgs.h (ASM_OUTPUT_BEFORE_CASE_LABEL): Do the swbeg here.
	(ASM_OUTPUT_CASE_LABEL): Use that.

	* configure (m68k-*-amix*):  Use fixinc.svr4 and install.sh.

	* x-amix (ENQUIRE_CFLAGS):  Remove; obsolete.

	* amix.h (TRANSFER_FROM_TRAMPOLINE):  Remove #undef.

Mon Jul 20 17:45:46 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* dbxout.c (dbxout_source_line): New function.
	* final.c (output_source_line): Use that.

	* configure (sparc-*-sunos5*): New alias.
	(sparc-*-solaris2*): Use t-sol2.

	* i860.md (mulsi3_little, mulsi3_big): New define_expand patterns.
	(mulsi3): Just use one of them.

	* Makefile.in (install-fixincludes): Pass second and third args.

Mon Jul 20 16:07:12 1992  Pat Rankin  (rankin@eql.caltech.edu)

	* vms.h (MAYBE_VMS_FUNCTION_PROLOGUE): change _c$main_args to
	uppercase instead of relying on gas to make the case translation

Sun Jul 19 00:04:16 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-tree.h (C_PROMOTING_INTEGER_TYPE_P): New macro.
	* c-decl.c (duplicate_decls, grokdeclarator, finish_struct): 
	Use C_PROMOTING_INTEGER_TYPE_P to decide whether a type promotes.
	(start_function): Likewise.
	* c-typeck.c (default_conversion): Use C_PROMOTING_INTEGER_TYPE_P
	to decide whether a type should promote.
	(self_promoting_args_p, self_promoting_type_p): Likewise.

	* c-aux-info.c (gen_type): For array type, state the size.

	* final.c (output_addr_const): Handle ZERO_EXTEND and SIGN_EXTEND.
	* expr.c (expand_expr, NOP_EXPR case): If EXPAND_INITIALIZER,
	generate ZERO_EXTEND or SIGN_EXTEND; don't emit insns.

	* function.c (assign_parms): Use const0_rtx as DECL_RTL and as
	DECL_INCOMING_RTL if tmode of parm is void.

	* jump.c (mark_jump_label): Don't make REG_LABEL for nonlocal label.
	* loop.c (add_label_notes): Don't make REG_LABEL for nonlocal label.
	(rtx_renumbered_equal_p): Use == to compare nonlocal labels.

	* rtl.h (LABEL_REF_NONLOCAL_P): New macro.
	* expr.c (expand_expr): Set LABEL_REF_NONLOCAL_P for nonlocal labels.
	* reload1.c (set_label_offsets): Ignore nonlocal labels.

	* c-parse.y (primary): Set TREE_CONSTANT in the NOP_EXPR for an enum.

	* Solaris changes from Cygnus:

	* fixinc.svr4: take a third argument indicating where files to be
	copied in should come from (useful when not building in source
	directory).  
	Set TERM to dumb so ex won't hang (by zoo).
	* fixincludes: Take the same new argument.

	* gmon-sol2.c: New file.
	* t-sol2: New file.
	* sol2-crt1.s, sol2-crti.s, sol2-crtn.s: New files.

	* xm-spcv4.h (ONLY_INT_FIELDS): Define, if __GNUC__.

	* sparc.h (FUNCTION_PROFILER):  Use ASM_OUTPUT_INTERNAL_LABELREF.
	(FUNCTION_BLOCK_PROFILER):  Mark with FIXME that it needs work.
	(ASM_OUTPUT_INTERNAL_LABELREF):  Define.
	* spc-sol2.h: Entire file is new except for
	defining MD_STARTFILE_PREFIX.
	* dbxout.c (dbxout_block): obey DBX_BLOCKS_FUNCTION_RELATIVE
	(dbxout_init):  Use ASM_IDENTIFY_GCC_AFTER_SOURCE if defined.

	* sparc.h (CONSTANT_ALIGNMENT): Add parens for Sun compiler.

Sun Jul 19 11:03:56 1992  Fred Fish  (fnf at fishpond)

	* i386v4.h (real.h): Remove apparently unnecessary inclusion.
	* i386v4.h (HANDLE_SYSV_PRAGMA):  Replaces HANDLE_PRAGMA.

Sat Jul 18 20:37:37 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-typeck.c (build_binary_op): Don't set shorten for signed division.

	* final.c (end_final): Align the table of addresses.

Fri Jul 17 23:49:28 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* cexp.y: Include stdio.h.

Fri Jul 17 06:17:34 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* cp-tree.h (DECL_THIS_EXTERN): Renamed from DECL_EXTERNAL.
	* cp-pt.c, cp-decl.c: Rename DECL_EXTERNAL -> DECL_THIS_EXTERN and
	then rename TREE_EXTERNAL -> DECL_EXTERNAL.

Fri Jul 17 05:59:26 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* function.c (instantiate_decls{,_1}): Don't do instantiation
	here if the address is mode-dependent.

	* libgcc2.c: Include tconfig.h instead of tm.h.
	Include machmode.h.
	(__do_global_dtors): Cast to widest integer type, then narrow, to
	avoid warning if int is narrower than pointer.
	* Makefile.in (libgcc2.a): Includes machmode.h.

	* cse.c (cse_insn): Allow paradoxical SUBREGs in the table.

	* reload.c (secondary_memlocs{,_elim}): New variables.
	(get_secondary_mem, clear_secondary_mem): New function.
	(push_reload): 	Convert SUBREG of hard reg to new hard reg.
	Call get_secondary_mem when needed.
	(find_reloads): Clear secondary_memloc_elim for each insn.
	* reload1.c (reload): If SECONDARY_MEMORY_NEEDED, check for frame
	size changed.
	Call clear_secondary_mem.
	(emit_reload_insns, gen_input_reload): Use memory when required to
	do reload.
	* reload.h (get_secondary_mem): Declare.

	* cccp.c (NULL_PTR): Define as void * if STDC.

	* rs6000.md (negdi2): Corrected name; used to be negdi3.

	* combine.c (subst, case SET): Put code to move SUBREG after
	code that calls make_compound_operation.
	(make_extraction): Don't check for INNER a REG except for in dest.
	Fix typo checking for REG.
	(make_compound_operation): Get the result in the same mode it
	used to be.

	* reload.c (push_reload): If a SUBREG requires a secondary reload
	but the inner expression doesn't, reload the inner expression
	instead.

Fri Jul 17 02:20:51 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* gcc.c (process_command): Handle `-Wl,' and `-Wa,'.
	(do_spec_1): Handle %Y.
	(default_compilers): Use %Y in assembler commands.

	* function.c (assign_parms): In last change, test mode in parm type.

Thu Jul 16 15:03:25 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* loop.c (find_and_verify_loops): Ignore jumps to missing labels,
	when using P.

	* c-typeck.c (build_binary_op): Improve shift warning messages.

	* x-dpx2 (AS): Use $(GAS).
	(GAS): New variable.

	* mot3300.h (ASM_OUTPUT_CASE_END): Deleted.

	* function.c (assign_parms): If arg was passed by invisible
	reference, copy it to a pseudo if appropriate.

	* dwarfout.c (pure_or_virtual_attribute):
	Add #if 0 around use of DECL_ABSTRACT_VIRTUAL_P.

Wed Jul 15 16:29:05 PDT 1992  Ron Guilmette  (rfg at ncd.com)

	* dwarfout.c (BLOCK_INLINE_FUNCTION):  Obsolete definition deleted.
	(block_ultimate_origin):  New function.
	(output_block):
	Local var `have_significant_locals' renamed to `must_output_die'.
	(output_block):  Rewritten to handle abstract & concrete instances of
	blocks of inline functions.
	(output_decls_for_scope):
	Don't bump `next_block_number' for abstract blocks.

	* toplev.c (rest_of_compilation): Call `dwarfout_file_scope_decl' for
	both types of "abstract" instances of inline functions.

	* tree.def (BLOCK):  Use new tree code category letter 'b' for BLOCKs.
	* tree.h (struct tree_block):  New struct type definition added.
	(BLOCK_VARS, BLOCK_TYPE_TAGS, BLOCK_SUBBLOCKS, BLOCK_HANDLER_BLOCK):
	Changed to reference fields of the new `struct tree_block' type.
	(BLOCK_ABSTRACT_ORIGIN, BLOCK_ABSTRACT):  Definitions added.
	(union tree_node):  Added `struct tree_block' as a new variant.
	* tree.c (typedef tree_node_kind):  Added new kind, i.e. `b_kind'.
	(tree_node_kind_names):  Added string name for new kind `b_kind'.
	(make_node, copy_node, stabilize_reference_1):
	Handle case 'b' (for BLOCK nodes).
	(make_node):  Don't try to deal with BLOCKs when doing a type 'e' node.
	* print-tree.c (print_node):
	Handle type 'b'; delete code for BLOCK from 'e' case.
	Handle fields BLOCK_ABSTRACT_ORIGIN and BLOCK_ABSTRACT.
	* calls.c (calls_alloca):  Don't return 0 automatically if the expr
	given is headed by a type 'b' node.
	* cp-tree.c (break_out_calls):  Add case for decl nodes.
	Added case to catch BLOCK nodes (and to abort).
	* integrate.c (copy_decl_tree):  Set BLOCK_ABSTRACT_ORIGIN in new
	instance block if not already set.
	(expand_inline_function): Set BLOCK_ABSTRACT_ORIGIN for outermost
	scope to point to progenitor (abstract inline) FUNCTION_DECL node.
	(integrate_decl_tree):  Set BLOCK_ABSTRACT_ORIGIN for inlined instance
	BLOCKs.
	(set_block_origin_self, set_decl_origin_self, set_block_abstract_flags,
	set_decl_abstract_flags):  New functions.
	(output_inline_function):  Call `set_decl_origin_self' for each fndecl
	which is about to have an out-of-line instance generated for it.

Wed Jul 15 15:08:00 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-convert.c (convert_to_integer): Push truncation inside COND_EXPR.

	* optabs.c (emit_cmp_insn): Always do protect_from_queue on x, y, size.
	(expand_float, expand_fix): Likewise.
	* expmed.c (expand_shift, expand_set_flag):
	Call protect_from_queue before convert_to_mode.
	* expr.c (convert_move): Don't call protect_from_queue.
	(emit_block_move): Protect SIZE.

	* explow.c (allocate_dynamic_stack_space) [SETJMP_VIA_SAVE_AREA]:
	Always call round_push; we can't rely on alignment of size.

Wed Jul 15 06:47:11 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu)

	* combine.c (try_combine): Verify that I2DEST is a register before
	trying to change its mode.

Tue Jul 14 15:13:28 1992  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* c-decl.c (finish_struct): Handle nested struct redefinitions.
	* stor-layout.c (layout_record): Handle NULL dsize.

Tue Jul 14 21:31:51 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-decl.c (duplicate_decls, pushdecl, grokdeclarator): 
	(store_parm_decls, combine_parm_decls, finish_function):
	Use TYPE_MAIN_VARIANT when comparing against specific non-void types.
	* c-typeck.c (self_promoting_args_p, self_promoting_type_p):
	(signed_type, unsigned_type, default_conversion, check_format):
	(build_binary_op, c_expand_start_case): Likewise.

Mon Jul 13 14:57:34 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-decl.c (finish_function): Fix braino validating ret type of main.

	* expr.c (expand_builtin): Refer to errno at rtl level only.
	* sparc.h (TARGET_EDOM, GEN_ERRNO_RTX): New macros.

Mon Jul 13 06:35:53 1992  Paul Eggert  (eggert@twinsun.com)

	* expr.c (expand_builtin):
	For fsqrt, always use the special insn, then test for nan.

Mon Jul 13 08:45:34 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* m88k.md: Constraint fixes from Torbjorn.

	* jump.c (jump_optimize): In `x = a; if (...) x = b;' allow both a
	and b to be non-zero if jumps are very expensive.  Also allow a
	and b to be constants where all the set bits in a are also set in
	b when jumps are merely expensive.

Sun Jul 12 17:43:03 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* genpeep.c (match_rtx): Sometimes use %ld when printing an XWINT.

	* regclass.c (record_reg_classes): If OP is a REG, use it's mode
	in case the mode in MATCH_OPERAND is VOIDmode.

Sun Jul 12 13:03:54 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* fixincludes: Replace the code that finds all directories
	so that it looks for subdirs of dir reached via symlinks.

	* cp-tree.h (IDENTIFIER_VIRTUAL_P): Macro moved here.
	* tree.h (IDENTIFIER_VIRTUAL_P): Deleted from here.

	* rtl.h (NOTE_BLOCK_NUMBER, SET_NOTE_BLOCK_NUMBER): New macros.
	(NOTE_DECL_NAME, NOTE_DECL_CODE, ...): #if 0'd.
	* function.c (identify_blocks, reorder_blocks): New functions.
	(all_blocks, blocks_nreverse): New functions.

	* isi.h: Deleted the #error; file should work now.
	(LIB_SPEC): Use -lg only once.
	(STRUCTURE_SIZE_BOUNDARY): Defined.

	* protoize.c (process_aux_info_file): Set must_create before jumping to
	start_over.  Don't clear must_create at start_over.  Don't test
	source file mod time for SYSCALLS.

	* machmode.h (GET_MODE_NUNITS): Avoid division by zero.

Sat Jul 11 22:21:47 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* objc-parse.y (primary): Don't test TREE_EXTERNAL;
	call assemble_external regardless.

	* tree.h (DECL_INLINE, DECL_NONLOCAL, DECL_REGISTER, DECL_EXTERNAL):
	Renamed from TREE_INLINE, TREE_NONLOCAL, TREE_REGDECL, TREE_EXTERNAL.
	All uses changed.

	* xm-hp320.h (USG): Define it.

Sat Jul 11 21:43:56 1992  Michael Meissner  (meissner@osf.org)

	* mips.h (MIPS_VERSION): Bump meissner version number to 21.

	* mips.md (andsi3, iorsi3, xorsi3): Make predicates match the
	actual machine, since combine can now recreate the bitfields, and
	doesn't do multiple logical operations when setting more than one
	bitfield in a word.

	* objc-actions.c (xmalloc, free): Don't provide extern decls for
	these, since tree.h and rtl.h both now provide them.

	* cp-lex.c (real_yylex): Declare a variable i, since a for loop
	uses it as an index.  Remove an extra '(' from a build_int_2 call.

Sat Jul 11 13:13:03 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* varasm.c: Get rid of default definitions of ASM_OUTPUT_CONSTRUCTOR
	and ASM_OUTPUT_DESTRUCTOR.

	* c-aux-info (affix_data_type): Don't be fooled by names starting
	with `const' or `volatile'.	

	* c-typeck.c (digest_init): Deal with nested {...} for scalar.

	* loop.c, reload1.c: Include stdio.h before config.h.

	* toplev.c (rest_of_compilation): Save and restore DECL_ARGUMENTS.

Fri Jul 10 22:42:34 1992  Paul Eggert  (eggert@twinsun.com)

	* tree.c (build_real_from_int_cst): Truncate when folding to float.
	(real_value_from_int_cst): Do not treat the topmost bit
	of an unsigned long long value as a sign bit.

	* cse.c (simplify_binary_operation): Don't optimize 0.0/x to 0.0
	if IEEE floating point is used, because x might be negative or NaN.

Fri Jul 10 15:37:42 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

    	* genpeep.c (match_rtx): Handle `w' elts of rtx.

	* Makefile.in (INTERNAL_CFLAGS): Add -DIN_GCC.

Fri Jul 10 18:56:22 1992  Eric Youngdale (youngdale@v6550d.nrl.navy.mil)

	* cccp.c (finclude): Clean error msf if file_size_and_mode fails.

Fri Jul 10 13:44:46 1992  Howard Chu  (hyc@hanauma.jpl.nasa.gov)

	* fx2800.h (LINK_LIBGCC_SPECIAL): Defined.
	(DBX_OUTPUT_STANDARD_TYPES): Check that DECL_NAME(decl) exists
	before trying to get its IDENTIFIER_POINTER.

Thu Jul  9 20:56:01 1992  Per Bothner  (bothner@rtl.cygnus.com)

	* dbxout.c (dbxout_type_methods):  Fix minimal_debug so
	that it skips a redundant class name prefix, as intended.
	It now expects the length digits that precede the class name.

Thu Jul  9 18:23:12 1992  Torbjorn Granlund  (tege@wombat.gnu.ai.mit.edu)

	* Makefile.in, libgcc2.c, longlong.h: Rename udiv_using_sdiv to
	udiv_w_sdiv.

Thu Jul  9 18:10:40 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* tree.h (STRIP_TYPE_NOPS): New macro.
	* c-decl.c (build_enumerator): Use STRIP_TYPE_NOPS.
	* c-typeck.c (default_conversion): Use STRIP_TYPE_NOPS.
	(build_binary_op, build_function_call): Likewise.
	* c-common.c (check_case_value): Use STRIP_TYPE_NOPS.

	* mot3300.h (ASM_OUTPUT_CASE_END): New macro.
	* m68k.c (switch_table_difference_label_flag): New variable.

	* i860.md (QI and HI bte/btne patterns): Deleted.

Thu Jul  9 06:09:20 1992  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* c-typeck.c (default_conversion): Don't use STRIP_NOPS.

	* print-rtl.c: Missing merge from 64-bit changes.
	(print_rtx): Add new case 'w'.

Wed Jul  8 14:35:39 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* fixincludes, fixinc.svr4: Error if no argument.

	* tree.c (integer_zerop, integer_onep, integer_all_onesp):
	(integer_pow2p, real_zerop, real_onep, real_twop): Use STRIP_NOPS.
	* expr.c (do_store_flag): Likewise.
	* varasm.c (output_constructor): Likewise.
	* c-decl.c (finish_struct, build_enumerator): Likewise.
	* c-typeck.c (default_conversion, build_binary_op): Likewise.
	(build_function_call): Likewise.

	* integrate.c (integrate_decl_tree): Get rid of arg functionbody;
	it was always 0.

	* mot3300.h: Fix typo.

	* final.c (leaf_renumber_regs_insn): Handle new 'w' format.

Wed Jul  8 15:18:33 PDT 1992  Ron Guilmette  (rfg at ncd.com)

	* tree.h (DECL_ABSTRACT_ORIGIN, DECL_ABSTRACT):  Definitions added.
	(struct tree_decl):  New fields `abstract_origin' & `abstract_flag'.
	(struct tree_decl):  Field `from_inline_flag' deleted.
	(DECL_FROM_INLINE):  Definition revised to check DECL_ABSTRACT_ORIGIN.
	* integrate.c (copy_decl_list):  New function added.
	(save_for_inline_copying): Call `copy_decl_list' for formal parameters.
	Set DECL_ABSTRACT_ORIGIN for fndecl to point to itself.
	(copy_decl_tree):  Use `copy_decl_list' rather than just `copy_list'.
	(integrate_parm_decls, integrate_decl_tree):  Set DECL_ABSTRACT_ORIGIN
	to point to the progenitor.
	* print-tree.c (print_node):  Print the value of DECL_ABSTRACT_ORIGIN
	rather than the value of DECL_FROM_INLINE.

	* dwarfout.c (output_inlined_enumeration_type_die): New function.
	(output_inlined_structure_type_die, output_inlined_union_type_die):
	New functions added.
	(output_entry_point_die, output_formal_parameter_die,
	output_global_subroutine_die, output_global_variable_die,
	output_label_die, output_lexical_block_die,
	output_inlined_subroutine_die, output_local_variable_die,
	output_local_subroutine_die):
	Fixed to handle inline abstract & concrete (i.e. inlined) instances.
	(output_inlined_subroutine_die): Deleted.
	(output_label_die):  Don't permit the rtx associated with a named
	user-declared label to be marked as INSN_DELETED_P.
	(output_tagged_type_instantiation):  New function added.
	(output_decl):  Call `output_tagged_type_instantiation'.
	Don't generate a pubnames label for anything marked as DECL_ABSTRACT.
	(output_die):  Generate the proper kind fo DIE for each of the four
	possible combination of {normal, inlined} {variable, parameter}.
	(dwarfout_file_scope_decl):  Don't generate pubnames entries if
	strictly abstract.

	* dwarfout.c (ordering_attribute):  Only def if USE_ORDERING_ATTRIBUTE
	is defined.
	(output_array_type_die): Only call ordering_attribute if it is defined.
	(name_and_src_coords_attributes):  Don't make it inline.
	Do make it static linkage.
	(const_value_attribute):  Catch invalid kinds of rtx nodes
	by aborting for the default case in switch.

	* dwarfout.c (output_ptr_to_mbr_type_die):  Make it static linkage.
	(output_formal_types):  Make sure that `formal_type' is initialized.
	(output_type):  Add a default case for switch.
	(output_decl):  Don't suppress DIEs for the initial (artificial)
	arguments for C++ static member functions.

	* dwarfout.c (ceiling, field_type, simple_type_align_in_bits,
	simple_type_size_in_bits, field_byte_offset):  New functions added.
	(data_member_location_attribute):  Use new routine `field_byte_offset'
	to calculate the offset value for the AT_location attribute.
	(byte_size_attribute):  Use new routine `field_type' to get the
	actual type for any FIELD_DECL.  Also, use `simple_type_size_in_bits'
	to avoid potential problems with ERROR_MARKs when computing the size
	of a FIELD_DECL.
	(bit_offset_attribute):  Rewritten to use `field_byte_offset' when
	determining the start of the "containing object".

	* integrate.c (expand_inline_function):  Integrate parameters before
	locals to get debugging information in the proper order.
	(integrate_decl_tree):  Don't do a redundant pushlevel/poplevel for
	the outermost scope (i.e. when level==0)... just use the one created
	by `expand_inline_function'.

	* calls.c (calls_alloca): For BLOCK, walk subblocks and vars by hand.

Wed Jul  8 13:31:19 1992  Michael Meissner  (meissner@osf.org)

	* cp-decl.c (print_binding_level): Fix typo, where 'lbl' was used
	instead of 'lvl'.

	* objc-actions.c (build_shared_structure_initializer): Correct call
	to build_int_2 which had only one argument, instead of two.

Wed Jul  8 06:37:40 1992  Torbjorn Granlund  (tege@sics.se)

	* gstdarg.h, gvarargs.h: Test `__hppa__' instead of `__hp9000s800__'.

	* romp.md (zero_extendhisi2): Remove unneeded constraint.

	* rs6000.md (zero_extendhisi2): Remove unneeded constraint.
	(lu/stu): Use %0 instead of %1 in assembler insns.
	(call_value): Add missing "=" in constraint.

Wed Jul  8 06:30:20 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* rs6000.md (floatsidf): Correctly handle case when SImode operand
	overlaps the first DFmode register.

	* fold-const.c (distribute_bit_expr, range_test, fold_truthop):
	Use TRUTH_AND_EXPR instead of BIT_AND_EXPR so invert_truthvalue works.

	* c-decl.c (grokdeclarator): Strip all NOP_EXPRs from SIZE.

	* integrate.c: Do 64-bit changes (this file omitted the last time).
	Replace use of NULL and 0 in functions args with NULL_RTX.
	(copy_rtx_and_substitute, subst_constants): Handle "w" rtl
	operand class.

	* rs6000.h (LINK_SPEC): Support -static.

	* tree.c (make_node, copy_node, make_tree_vec, tree_cons, build1):
	Clear or copy tree nodes in a consistent manner, referencing
	every byte of the node.

	* regclass.c: Initialize REG_CLASS_CONTENTS into an array of
	ints, then copy into a HARD_REG_SET to avoid conditionalization
	of REG_CLASS_CONTENTS on 64-bit machines.

	* c-common.c (check_case_value): Strip the NOP_EXPR added by
	the grammar.
	* stmt.c (pushcase, pushcase_range): Don't do it here.

	* c-lex.c (yylex): Ensure TOTAL_PARTS is wide enough to store a
	constant as wide as we can store in an INTEGER_CST.
	(LONG_LONG_TYPE_SIZE): Deleted; no longer needed.

Tue Jul  7 15:50:38 1992  Chip Salzenberg  (chip@tct.com)

	* x-i386sco (XCFLAGS): Omit flags specific to "rcc".
	(CC, OLDCC): Put them here instead.

Tue Jul  7 18:57:10 1992  Mike Stump  (mrs@wombat.gnu.ai.mit.edu)

	The below entries should make DWARF debugging a little bit easier.

	* cp-decl.c (pushdecl): IDENTIFIER_GLOBAL_VALUE should not be _DECL
	nodes but rather TYPE_DECLs.

	* cp-decl.c (pushtag): Mark binding layer markers as internal.

	* cp-class.c (finish_struct): Propagate internal mark on binding
	layer markers.

	* cp-decl2.c (finish_file): Don't name things that should not be
	named.

	* cp-method.c (decl_as_string): New back-end routine for
	substitute_nice_name.

	* cp-decl2.c (substitute_nice_name): New function used to create
	reasonable DECL_NAMEs from cyrptic ones.

	* cp-decl2.c (grokclassfn): Use substitute_nice_name.

Tue Jul  7 14:04:01 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* expr.c (emit_move_insn): Don't try subwords for a single word.

	* gcc.c (find_a_file, putenv_from_prefix):
	Handle value of 2 in require_machine_suffix.
	(process_command): Supply 2 for standard_exec_prefix{,_1}.

	* gstdarg.h: Undefine _BSD_VA_LIST if we define va_list.

	* cccp.c (append_include_chain): Fix setting of first_bracket_include.

	* loop.c (init_loop): Use word_mode, not SImode.

	* x-dpx2: New file.
	* x-dpx2200, x-dpx2300: Files deleted.
	* configure (m68k-bull-sysv*): Fatal error unless --with-gas.
	Always use x-dpx2.

	* libgcc2.c (XFtype): Turn off definition; not used.
	(TFtype): Define only if needed.

Tue Jul  7 11:57:44 1992  Torbjorn Granlund  (tege@hal.gnu.ai.mit.edu)

	* tahoe.md (call_value): Add `=' to output operand constraint.
	* arm.md (call_value): Likewise.
	* gmicro.md (negsf2, negdf2, abssf2, absdf2): Likewise.
	(peephole for moving returned value to fp reg): Likewise.

	* longlong.h (SI_TYPE_SIZE):  Renamed from LONG_TYPE_SIZE.

	* longlong.h (machine independent code): #define udiv_qrnnd to call
	__udiv_using_sdiv if we have sdiv_qrnnd but not udiv_qrnnd.
	* libgcc2.c (__udiv_using_sdiv): New function.
	* Makefile.in (LIB2FUNCS): Add __udiv_using_sdiv.

Mon Jul  6 23:28:29 1992  Mike Stump  (mrs@wombat.gnu.ai.mit.edu)

	* cp-dem.c, cp-lex.c, cp-method.c, cp-xref.c:  Do not include
	string.h or strings.h.

Mon Jul  6 18:32:31 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* emit-rtl.c (operand_subword): Avoid conditionals in macro arg.

	* Changes to support execution on 64-bit machines.
	* machmode.h (HOST_BITS_PER_WIDE_INT, HOST_WIDE_INT, HOST_PTR_PRINTF):
	Provide default definitions.
	(MAX_SHORT): New macro.
	(GET_MODE_BITSIZE): Cast result and shift constant to HOST_WIDE_INT.
	* rtl.h (union rtunion_def): Add field rtwint.
	(XWINT): New accessor macro.
	(INTVAL): Use XWINT, not XINT.
	(exact_log2, floor_log2, plus_constant, plus_constant_for_output):
	Now macros that cast arg to HOST_WIDE_INT.
	(NULL, NULL_PTR): Provide default definitions.
	(GEN_INT): New macro.
	(get_integer_term): Now returns HOST_WIDE_INT.
	* tree.h (NULL, NULL_PTR): Provide default definitions.
	(INT_CST_LT, INT_CST_LT_UNSIGNED): Cast to HOST_WIDE_INT.
	(struct tree_int_cst): Pieces of constant are HOST_WIDE_INT, not
	long.
	(exact_log2, floor_log2, build_int_2): Now macros, like rtl.h.
	* real.h (REAL_VALUE_TYPE, union real_extract): Use HOST_WIDE_INT,
	not long.
	(CONST_DOUBLE_LOW, CONST_DOUBLE_HIGH): Use XWINT instead of XINT.
	* rtl.def (CONST_INT): Operand type now "w".
	(CONST_DOUBLE): Change operands from type "i" to "w".
	* basic-block.h (REGSET_ELT_BITS): Always use HOST_BITS_PER_WIDE_INT.
	(REGSET_ELT_TYPE): New macro; same as HOST_WIDE_INT.
	* expr.h (ARGS_SIZE_RTX): Use NULL_RTX in expand_expr call.
	(plus_constant): Remove duplicate declaration.
	* hard-reg-set.h (HARD_REG_SET): Only scalar type we use
	is HOST_WIDE_INT; array is array of HOST_WIDE_INT.
	* loop.h (struct induction): Field CONST_ADJUST is now HOST_WIDE_INT.
	(loop_n_iterations): Now unsigned HOST_WIDE_INT.
	(loop_iterations): Returns HOST_WIDE_INT.
	* c-parse.y, cexp.y, c-decl.c, c-lex.c, c-typeck.c, caller-save.c:
	Change 0 or NULL when passed as a parameter that should be a pointer
	to NULL_TREE, NULL_RTX, or NULL_PTR, as appropriate.
	* calls.c, cccp.c, combine.c, cp-lex.c, cse.c, dbxout.c: Likewise.
	* dwarfout.c, emit-rtl.c, explow.c, expmed.c, expr.c: Likewise.
	* final.c, flow.c, fold-const.c, function.c, gcc.c: Likewise.
	* genattrtab.c, genpeep.c, genrecog.c, global-alloc.c: Likewise.
	* jump.c, local-alloc.c, optabs.c, recog.c, reg-stack.c: Likewise.
	* regclass.c, reload.c, reload1.c, reorg.c, rtl.c: Likewise.
	* rtlanal.c, sched.c, sdbout.c, stmt.c, stor-layout.c: Likewise.
	* toplev.c, unroll.c, varasm.c, loop.c, xcoffout.c: Likewise.
	* caller-save.c, combine.c, cp-class.c, cp-decl.c, cp-method.c:
	Cast and declare objects used to refer to wide values as HOST_WIDE_INT.
	Use HOST_BITS_PER_WIDE_INT instead of HOST_BITS_PER_INT.
	* cp-pt.c, cp-type2.c, cp-typeck.c, cse.c, dbxout.c: Likewise.
	* dwarfout.c, emit-rtl.c, explow.c, expmed.c, expr.c: Likewise.
	* final.c, fold-const.c, genattrtab.c, recog.c, reg-stack.c: Likewise.
	* regclass.c, reload.c, sched.c, stmt.c, stor-layout.c: Likewise.
	* loop.c, toplev.c, unroll.c, varasm.c: Likewise.
	* caller-save.c, combine.c, flow.c, global-alloc.c, reorg.c, sched.c:
	When refering to regsets, use type REGSET_ELT_TYPE.
	* calls.c, combine.c, emit-rtl.c, explow.c, expmed.c, expr.c, final.c:
	Use GEN_INT macro when making CONST_INTs.
	* function.c, jump.c, loop.c, optabs.c, recog.c, reload1.c: Likewise.
	* unroll.c: Likewise.
	* cp-decl.c, cp-ptree.c, print-tree.c: Use HOST_PTR_PRINTF when
	printing pointer values.
	* cccp.c, cexp.y, gcc.c (NULL, NULL_PTR): Provide default definition.
	* c-common.c (NULL): Remove definition from here.
	* c-decl.c (NULL): Likewise.
	(finish_struct): Ensure high-order part of width is zero.
	* cp-decl.c (finish_enum): Likewise.
	* c-lex.c (yylex): Call build_int_2 in more portable way.
	(yyprint): Print constant different ways, depending on host parameters.
	* final.c (output_asm_insn, output_addr_cont): Likewise.
	* genattrtab.c (write_test_expr): Likewise.
	* print-tree.c (print_node_brief, print_node): Likewise.
	* cp-decl.c (xref_tag): Remove explicit reference to modes.
	* cp-method.c (build_overload_value): Likewise.
	* cp-lex.c (real_yylex): Make accumulating bits for constant 
	more portable.
	* cse.c (uid_cuid): Now pointer to int instead of to short.
	(exp_equiv_p): Change ifs on GET_RTX_FORMAT to a switch.
	Add format code of "w".
	* emit-rtl.c (gen_rtx): Add format code of "w".
	* jump.c (rtx_renumbered_equal_p, rtx_equal_for_thread_p): Likewise.
	* loop.c (rtx_equal_for_loop_p): Likewise.
	* reload.c (operands_match_p): Likewise.
	* rtl.c (copy_rtx, copy_most_rtx): Likewise.
	* rtlanal.c (rtx_equal_p): Likewise.
	* sched.c (rtx_equal_for_memref_p): Likewise.
	* explow.c (plus_constant_wide): Formerly plus_constant; argument
	is HOST_WIDE_INT.
	(plus_constant_for_output_wide): Similarly.
	* fold-const.c: Use MAX_SHORTS for dimension of array of shorts.
	* genattrtab.c (NULL_ATTR): New macro.
	(attr_rtx): Use XWINT, not XINT, for CONST_INT.
	Add case "w".
	(check_attr_test, write_test_expr, main): Use XWINT, not XINT,
	for CONST_INT.
	* genemit.c (gen_exp): Use "NULL_RTX" instead of "0" when
	emitting null.
	Use GEN_INT and proper width when emitting a CONST_INT.
	Abort if trying to write a CONST_DOUBLE.
	* genrecog.c (struct decision): Add new fields TEST_ELT_ZERO_WIDE
	and ELT_ZERO_WIDE.
	(add_to_sequence, not_both_true, merge_trees, write_tree_1):
	Use new fields.
	* global-alloc.c (INT_BITS, INT_TYPE): Use HOST_WIDE_INT for type
	of conflict matrix.
	* loop. (loop_n_iterations): Now HOST_WIDE_INT.
	* recog.c: Remove redundant declarations of plus_constant_for_output
	and copy_rtx.
	* rtl.c: Declare atol if needed.
	(rtx_format): Add code for "w".
	(read_rtx): Read code "w" field with atol if required.
	(init_rtl): Fields of CONST_DOUBLE are now type "w".
	* rtlanal.c (get_integer_term): Returns HOST_WIDE_INT.
	* cccp.c, toplev.c: Error function args are HOST_WIDE_INT (kludge).
	* toplev.c (exact_log2_wide): Renamed from exact_log2 and now has
	arg of type HOST_WIDE_INT.
	(floor_log2_wide): Similarly.
	* tree.c (permalloc): Type of SIZE arg is int, not long.
	(build_int_2_wide): Renamed from build_int_2 and has args of
	type HOST_WIDE_INT.
	* unroll.c (loop_iterations): Now returns HOST_WIDE_INT.
	* varasm.c (immed_double_const): Arguments are now HOST_WIDE_INT.

Mon Jul  6 14:56:26 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-common.c (decl_attributes): Don't set DECL_PACKED on VAR_DECL.

	* Makefile.in (GCC_CFLAGS):
	Use CROSS_GCC_CFLAGS instead of -B for tooldir.
	* cross-make (CROSS_GCC_CFLAGS): Define as -B for tooldir.

	* c-decl.c (finish_function): If return type of `main' is not `int',
	warn instead of doing DEFAULT_MAIN_RETURN.

	* collect2.c, dwarfout.c, halfpic.c: Don't incude string.h.

	* c-decl.c (duplicate_decls): Let char *foo () match void *foo ()
	only if one of them came from a system header file.

	* stmt.c (pushcase): Fix typo.

	* Makefile.in (ALLOCA_FINISH): Make default `true'.

	* cccp.c (main): Clear first_bracket_include for -I-.
	Set first_system_include for first system header directory.
	(is_system_include): Start search at first_system_include.

Mon Jul  6 12:58:27 1992  Chip Salzenberg  (chip@tct.com)

	* cccp.c (INCLUDE_LEN_FUDGE): Defined.
	(append_include_chain): New function.  Adds directory(ies)
	to include chain and updates value of max_include_len.
	(main, path_include): Use append_include_chain.
	(do_include): Use INCLUDE_LEN_FUDGE.

	* tree.h (DECL_IN_SYSTEM_HEADER): Defined.
	(struct tree_decl): Add in_system_header_flag.
	* c-common.c (declare_function_name): For __FUNCTION__
	and __PRETTY_FUNCTION__, set DECL_IN_SYSTEM_HEADER instead
	of TREE_USED to supress `unused' warnings.
	* c-decl.c (duplicate_decls): Merge DECL_IN_SYSTEM_HEADER flag.
	* print-tree.c (print_node): Display TREE_RAISES and
	DECL_IN_SYSTEM_HEADER flags.
	* toplev.c (compile_file): Do not warn if an unused DECL
	has DECL_IN_SYSTEM_HEADER set.
	(rest_of_compilation): Do not set TREE_USED on static
	functions defined in system headers; this will be taken
	care of with DECL_IN_SYSTEM_HEADER.
	* tree.c (make_node): Set DECL_IN_SYSTEM_HEADER on permanent
	decls defined in system headers.
	* objc-actions.c (build_module_descriptor,add_objc_decls):
	Set DECL_IN_SYSTEM_HEADER instead of TREE_USED on compiler-
	created decls.

Mon Jul  6 10:17:30 1992  Michael Collison  (collison at osf.org)

	* i386.h  (SUBTARGET_SWITCHES):
	Incoporate SUBTARGET_SWITCHES into TARGET_SWITCHES.
	(HALF_PIC_P, HALF_PIC_NUMBER_PTRS, HALF_PIC_NUMBER_REFS,
	HALF_PIC_ENCODE, HALF_PIC_DECLARE, HALF_PIC_INIT,
	HALF_PIC_ADDRESS_P, HALF_PIC_PTR, HALF_PIC_FINISH):
	Define these as stubs if not OSF/1 platform.
	* i386.md (movsi): Recognize half-pic moves.

Mon Jul  6 11:16:47 1992  Tim Moore  (moore@defmacro.cs.utah.edu)

	* pa.h (ASM_DECLARE_FUNCTION_NAME): Fix typo

Mon Jul  6 08:48:51 1992  Torbjorn Granlund  (tege@hal.gnu.ai.mit.edu)

	* m68k.md (swapsi): Add `+' operand constraints.
	(insert to memory recognizer): Add `+'.
	(peephole for moving returned value to fp reg): Add `='.

Sun Jul  5 16:34:24 1992  John F Carr  (jfc at Achates.mit.edu)

	* vax.md (addsi3): Code generation improvements (whether to use movab).

	* vax.md (andsi3, andhi3, andqi3): If one of the source operands
	is a constant, complement that operand instead of a register or
	memory operand.

Sun Jul  5 13:16:15 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c (try_combine): When splitting using a DEFINE_SPLIT,
	update the number of sets of the destination if it is being set
	twice.  Also update reg_significant.

Sun Jul  5 13:14:50 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c++: Fix typo testing $quote for nullness.

	* cse.c (simplify_binary_operation): Don't put sum of two symbolic
	addresses into a CONST.

	* m68kv4.h (ASM_OUTPUT_ALIGNED_COMMON): #undef this.
	(ASM_OUTPUT_ALIGNED_LOCAL): #undef this.
	(ASM_OUTPUT_ASCII): New overriding definition.
	(ASM_OUTPUT_CASE_END): New overriding definition.

	* c-typeck.c (convert_arguments): No -Wconversion warning
	if the function wants an enumeral type.

	* tek6000.h, tek6100.h, tek6200.h: New files.
	* configure (ns32k-tek6100-bsd, ns32k-tek6200-bsd): New alternatives.
	* config.sub: utek is synonym for bsd.

	* Makefile.in (alloca.o): Add -c.

	* Makefile.in (start.encap): Use LIBGCC1, not LIBGCC1_TARGET.
	(GCC_CFLAGS): Find executables in $(tooldir)/bin, not $(tooldir).
	(libgcc1.cross): New target.
	(all.cross, cross-test): Depend on libgcc.a.
	* cross-make (LIBGCC1): Use libgcc1.cross.

	* Makefile.in (USER_H): va-hp800.h changed to va-pa.h.
	(install-common): Fix typo.

	* stmt.c (pushcase, pushcase_range): Use STRIP_NOPS on the values.

	* x-amix, x-i860v4, x-ncr3000, x-sparcv4: Undo last change.
	* x-i386v4, x-m68kv4: Files deleted.
	* configure (i386-*-sysv4, i486-*-sysv4, m68k-*-sysv4):
	Corresponding changes.

	* c-decl.c (duplicate_decls): Don't warn about disagreement in `inline'
	except when non-inline fn is made inline after a call or definition.

Sun Jul  5 10:25:22 PDT 1992  Ron Guilmette (rfg at ncd.com)

	* c-decl.c (grokdeclarator):  Make `long long long' an error, not a
	warning.  Make duplicate qualifiers do pedwarn, not warning.

	* c-decl.c (pushdecl):  Always create a new (variant) ..._TYPE node
	for each new TYPE_DECL node created.

	* libgcc2.c (UQItype, SItype, USItype, DItype, UDItype, SFtype, DFtype,
	XFtype, TFtype):  Typedefs added.
	(SI_TYPE_SIZE):  Renamed globally from LONG_TYPE_SIZE.
	Define names for ANSI C types to `bogus_type' over the range of lines
	where we must always use the new mode-related types.  Undef them again
	at the end of that range (so we can used the ANSI types again), and
	then define the mode-related type names to `bogus_type' to insure
	those are not used from then on.

	* libgcc2.c, longlong.h (DIstruct):  Renamed globally from  `longlong'.
	(DIunion): Renamed globally from  `long_long'.
	Universally use the new mode-related type names for all functions
	and macros which expect, yield, or otherwise rely on operands to be
	of certain GCC-defined machine modes.

Sun Jul  5 11:11:00 1992  Torbjorn Granlund  (tege@wombat.gnu.ai.mit.edu)

	* pa.h: (TARGET_VERSION): Print " (hppa)".
	* pa.md (zdepi recognizer): Add attribute.
	(recognizers for SImode load and store with fpregs): Add `=' to
	operand 0.

Sat Jul  4 15:02:19 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* configure (mips-*-sysv4): Don't set use_collect2.

	* c-parse.y (primary): Wrap a NOP_EXPR around an enum value.

	* libgcc2.c (__builtin_saveregs for i860): Test __svr4__, not SVR4.
	* va-i860.h: Test __svr4__.

	* c-decl.c (finish_function): Set BLOCK_SUPERCONTEXT of outer block.

	* x-m88kv3: File deleted.

	* x-sparcv4 (X_CFLAGS): Add -dn.

	* reorg.c: Move the #ifdef DELAY_SLOTS after the #includes.

Sat Jul  4 14:16:33 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c (SUBST): Ensure we don't call something that can make
	a new undo entry in the middle of our making one.

Sat Jul  4 12:17:55 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Makefile.in (cp-parse.c): Append YYEMPTY to cp-parse.h, not ...y.

	* cse.c (simplify_unary_operation): Add aborts in zero_extend
	and sign_extend cases, explaining how they might need to be changed.

	* i960.h (WORD_SWITCH_TAKES_ARG): Fix typo.

	* x-amix, x-sparcv4, x-i860v4, x-i386v4, x-ncr3000:
	Add -static to X_CFLAGS.
	* x-m68kv4: New file.
	* isc.h (HANDLE_SYSV_PRAGMA): Defined.

Sat Jul  4 15:18:33 PDT 1992  Ron Guilmette  (rfg at ncd.com)

	* xm-spc-sol2.h: New file.

	* tree.h (DECL_UID):  Definition added.
	(struct tree_decl):  `uid' field added.
	* tree.c (DECL_UID):  Initialize this uniquely for each new ..._DECL.

	* rtl.h (NOTE_INSN_DELETED_LABEL):  Definition added.
	* rtl.c (note_insn_name): Add entry for NOTE_INSN_DELETED_LABEL.
	* final.c (final_scan_insn):  Call `dwarfout_label' for each
	`NOTE_INSN_DELETED_LABEL'.
	* jump.c (delete_insn):  Don't really delete CODE_LABELs corresponding
	to user-declared lables... Turn them into NOTE_INSN_DELETED_LABELs
	instead.

	* dwarf.h (AT_abstract_origin):  Renamed from AT_specification.
	* dwarfout.c (dwarf_attr_name):  Likewise.
	(dwarf_tag_name, dwarf_attr_name, dwarf_stack_op_name,
	dwarf_typemod_name, dwarf_fmt_byte_name):  Use normal DWARF prefixes
	for string names of unrecognized values.
	(is_block_body):  New function added.
	(DECL_NAME_FMT):  Definition added.
	(equate_decl_number_to_die_number, abstract_origin_attribute,
	pure_or_virtual_attribute):  New functions added.
	(src_coords_attribute):  Only define this is DWARF_DECL_COORDINATES
	is defined.

	* populate: New file.

	* function.c (instantiate_decls): Delete #if 1.

	* flags.h, toplev.c, dbxout.c (use_gnu_debug_info_extensions):
	Renamed from `use_gdb_dbx_extensions'.

	* toplev.c (main):  Added support for -gdwarf+ and for -gxcoff+.

Sat Jul  4 08:39:47 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* m88k.c (m88k_end_prologue): Reset frame_laid_out here.
	(m88k_expand_prologue): Not here.

	* m88k.h (IDENT_ASM_OPT, ALIGN_ASM_OPT, ASM_OUTPUT_CASE_LABEL):
	Override svr4.h.

Fri Jul  3 12:40:27 1992  Paul Eggert  (eggert@twinsun.com)

	* fold-const.c (fold_convert): When converting a floating point
	constant to integer, warn about out-of-range values after truncating
	to integer, not before.

Fri Jul  3 19:34:07 1992  Mike Stump  (mrs@hal)

	* Makefile.in ($(srcdir)/cp-parse.c): extract YYEMPTY out of the
	parser generated .c file and put in the parser .h so that cp-lex.c
	does not have to define it.

	* cp-tree.c (__eprintf): Third argument line is now unsigned,
	completes Ron's Jul 2 change.

Fri Jul  3 15:03:30 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* configure: Set FIXINCLUDES in Makefile based on sysv4 or not.
	* x-amix (ENQUIRE_CFLAGS, FIXINCLUDES): Deleted.

	* config.sub: Recognize i486 like i386.

	* defaults.h (ASM_FORMAT_PRIVATE_NAME, ASM_OUTPUT_ADDR_VEC_ELT):
	(ASM_OUTPUT_ADDR_DIFF_ELT, ASM_STABD_OP): New default definitions.
	* final.c: Include defaults.h.
	(ASM_STABD_OP): Deleted.
	* Makefile.in (final.o) Depend on defaults.h.

	* Makefile.in (toplev.o): Use MAYBE_TARGET_DEFAULT.
	* configure: Set MAYBE_TARGET_DEFAULT for some targets.
	Use 3, if target is i486...
	Recognize i486 as well as i386 for most targets.

	* x-hp320g (LIBGCC1, AR, RANLIB, RANLIB_TEST, LIBCONVERT): Deleted.
	* t-hp320g (LIBGCC1, AR, RANLIB, RANLIB_TEST, LIBCONVERT): Defined.
	* t-svr4 (FIXINCLUDES): Deleted.

	* Makefile.in (ENQUIRE_CFLAGS): Add -DNO_LONG_DOUBLE_IO.

	* fold-const.c (BRANCH_COST): Add default definition.

	* cp-tree.h: Declare intQI_type_node, etc.
	* cp-decl.c: Declare intQI_type_node, etc.
	(init_decl_processing): Initialize those nodes.

Thu Jul  2 15:18:33 PDT 1992  Ron Guilmette  (rfg at ncd.com)

	* amix.h (ASM_OUTPUT_CASE_END, ASM_OUTPUT_ALIGNED_LOCAL):  Output
	tabs before SET_ASM_OP.

	* Makefile.in (dwarfout.o):  Dependency on defaults.h added.

	* sparcv4.h: Include real.h.
	(SET_ASM_OP): Undef it.

	* svr4.h (IDENT_ASM_OP):  Added generic svr4 definition.
	(ASM_FILE_END, ASM_OUTPUT_IDENT):  Use IDENT_ASM_OP.
	(ALIGN_ASM_OP):  Added generic svr4 definition.
	(ASM_OUTPUT_CASE_LABEL):  Added generic svr4 definition.

	* i860.c (strict_single_insn_op_p, relop): Deleted.
	* i860.h (ASM_OUTPUT_CASE_LABEL):  Fixed definition to use
	ASM_OUTPUT_ALIGN and ASM_OUTPUT_INTERNAL_LABEL.
	* i860b.h, i860v3.h (TARGET_VERSION):  Definitions added.
	* i860v3.h (CPP_PREDEFINES):  Predefine __svr3__ rather than SVR3.

	* c-decl.c (named_labels):  Change linkage to static.

	* assert.h (__eprintf): Declare 3rd arg as unsigned.

	* cccp.c (do_include): Don't do fprintf's if inhibit_warnings.
	Renamed system_header_p to angle_brackets.  Use is_system_include.
	(is_system_include): New function.
	(redundant_include_p) : Renamed from lookup_include.

	* c-common.c (type_for_size):  If no ANSI type matches, check for
	matches with built-in mode-releated types.
	(type_for_mode):  Likewise.
	* c-decl.c:  Added declarations for mode-related internal type nodes.
	(init_decl_processing):  Initialize the new type nodes.
	* c-tree.h:  Added declarations for mode-related internal type nodes.
	intQI_type_node, etc.

	* c-lex.c (yylex): For integers, rename shorts to parts.
	Let the number of them be variable.  Simplify overflow testing.
	Don't use long long types unless ll was specified.
	Don't warn twice.

Thu Jul  2 20:30:20 1992  Roland McGrath  (roland@churchy.gnu.ai.mit.edu)

	* gstdarg.h: #ifdef _STDARG_H, not __STDARG_H.

Thu Jul  2 18:18:07 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* global.c: Renamed from global-alloc.c.

Thu Jul  2 15:36:25 1992  Torbjorn Granlund  (tege@wombat.gnu.ai.mit.edu)

	* pa.c (zdepi_operand): New function.
	(emit_move_sequence): Use it.
	* pa.md: New pattern to recognize cases where zdepi can be used to
	load immediate constant.
	(insv): Allow obvious immediate values.
	(insv + 1): New recognizer for non-obvious immediate values.

Thu Jul  2 15:13:15 1992  Michael Meissner  (meissner@osf.org)

	* halfpic.c (half_pic_encode): Consider variables which are 'common'
	variables to need pic fixup.  Move the debug code, so that it prints
	for all calls, and calls debug_tree also.
	(half_pic_address): When doing eliminate_constant_term on a CONST,
	do a XEXP (addr, 0) to get to the real address.

	* decrose.h (CPP_SPEC, CC1_SPEC): If neither -fbuiltin nor
	-fno-builtin are passed, pass -fno-builtin, and renable the string
	and memory builtins via macros.  This is to support compiling the
	OSF/1 kernel which has a prototyped exit function which takes three
	arguments.  With no -pic switches, default to using shared libs.

	* i386rose.h (CPP_SPEC, CC1_SPEC): If neither -fbuiltin nor
	-fno-builtin are passed, pass -fno-builtin, and renable the string
	and memory builtins via macros.  This is to support compiling the
	OSF/1 kernel which has a prototyped exit function which takes three
	arguments.  Turn off pic support until the 386 backend supports it.

	* x-i386rose (SHLIB): Use -pic-none instead of -L${BUILD}/usr/ccs/lib.

	* x-decrose (SHLIB): Use -pic-none instead of -L${BUILD}/usr/ccs/lib.

	* mips.md (movsi): Rewrite handling of half-pic code so that load
	address of symbol + value is handled.
	(branch_zero): Don't allow branch comparing constant to 0.

Thu Jul  2 06:26:38 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* m88k.md (blockage insn): Renamed from profiler.
	(epilogue insn): Don't provide this if a return insn will suffice.
	(m88k_end_epilogue): If the last insn isn't a barrier, print a return.
	* m88k.c (null_prologue): Renamed from null_epilogue.

	* m88k.c (condition_value): New function.
	* m88k.md (compare word insns): New insns and define_split
	patterns to take advantage of recent fold_truthop change.

	* m88k.h (ADDITIONAL_REGISTER_NAMES): Represent the condition code
	register as (reg:CC 0).  Give it the names "cc" and "psr".
	* m88k.md (superoptimizer sequences): New define_split patterns.
	(add/sub with carry): New insns.
	(add/sub DImode, ffssi2): Clobber the condition code register.

Wed Jul  1 13:37:37 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* gstddef.h Don't define macros associated with size_t unless we
	actually want to declare size_t.  Likewise for ptrdiff_t and wchar_t.

	* Makefile.in (install-common): Depend on xgcc, g++, c++, EXTRA_PARTS.
	Don't delete specs from libsubdir unless it exists in build dir.

	* va-pa.h: Renamed from va-hp800.h.
	* gstdarg.h, gvarargs.h: Use new name.

	* news3.h, news3gas.h: New files.
	* configure (m68k-sony-newsos3*): New alternative.

	* romp.h (SIZE_TYPE): Defined.

	* configure: Support --exec-prefix.  Simplify handling
	detached arguments of options.

	* isc.h, and other related files:
	waiting for entries from karl@cs.umb.edu.

Wed Jul  1 12:04:53 1992  Ron Guilmette (rfg at ncd.com)

	* c-decl.c (grokdeclarator):  Don't mark file-scope register variables
	as TREE_PUBLIC.

Wed Jul  1 12:04:53 1992  Karl Berry (karl@cs.umb.edu)

        * i386iscgas.h (SIZE_TYPE, PTRDIFF_TYPE): Define these, since we
        need to override GCC's defaults.

        * configure (i386-*-isc): Use different files if we have gas.
        * t-i386iscgas, i386iscgas.h, isc.h: New files
        * i386isc.h: Include isc.h.  Most of contents moved to isc.h.
        * bsd386.h (ASM_OUTPUT_LABELREF) [NO_UNDERSCORES]: do not prepend an
        underscore in this case.
        * i386gas.h (CPP_SPEC): if -posix, do -D_POSIX_SOURCE.

Wed Jul  1 09:13:44 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* fold-const.c (fold_truthop): Renamed from merge_component_references.
	(simple_operand_p): New function.
	(range_test): Change JCODE parameter to the unconditional operation.
	(fold_truthop):  When branches are expensive, try to evaluate the
	RHS unconditionally.  Compute local variables as late as possible.

	* m88k.h (HANDLE_SYSV_PRAGMA): Replaces HANDLE_PRAGMA.
	* m88k.c (m88k_handle_pragma_token): Deleted.

Tue Jun 30 15:32:51 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-decl.c (duplicate_decls): If newdecl for builtin function
	has same return mode as the builtin, keep the builtin
	but use newdecl's return type.

	* i386.md (lshrdi3_const_int): Fix typo in shr insn.

	* Makefile.in (GCC_CFLAGS): Add `-B$(tooldir)/'.

	* i386sun.h, rs6000-mach.h, sparc.h, sun2o4.h, sun3.h (LINK_SPEC):
	Inhibit the default -e if -r or -nostdlib.

	* c-decl.c (lookup_label): Call label_rtx.

	* c-parse.y (primary): Rearrange and clean up.  In C_DECL_ANTICIPATED
	case, always call assemble_external and set TREE_USED.

Mon Jun 29 22:27:49 1992  Mike Stump  (mrs@wombat.gnu.ai.mit.edu)

	* cccp.c, cp-dem.c, dbxout.c, cp-lex.c, cp-xref.c, cp-method.c,
	dwarfout.c, c-typeck.c, mips-tfile.c, protoize.c, collect2.c: Make
	the compiler more consistent by using index and rindex everywhere
	instead of sometimes using strchr and strrchr.

Mon Jun 29 22:20:13 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* regclass.c (regclass): Restore some accidentally-deleted code.

Mon Jun 29 12:48:05 1992  Nobuyuki Hikichi  (hikichi@sra.co.jp)

	* collect2.c (MY_ISCOFF): New macro.
	(scan_prog_file): Use that instead of ISCOFF.

	* mips.c (override_options) [MIPS_NEWS]: Call setlinebuf.

Mon Jun 29 12:48:05 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* gcc.c (do_spec_1): For %I, pass -iprefix, not -imacros.

	* c-common.c (decl_attributes): For `packed' on VAR_DECL,
	set DECL_PACKED and DECL_ALIGN.

	* configure: Update usage message.
	(m68k-sony-newsos*, mips-sony-newsos*): New synonyms.

	* fold-const.c (merge_component_references):
	Make sure the four fields correspond in the proper order.

	* c-lex.c (check_newline): Support HANDLE_SYSV_PRAGMA.
	(handle_sysv_pragma): New function.
	* c-pragma.c: New file.
	* stor-layout.c (maximum_field_alignment): New variable.
	(layout_decl): Use it.
	* Makefile.in (C_OBJS, OBJC_OBJS): Add c-pragma.o
	(c-pragma.o): New rule.

	* i386.c (handle_pragma_token): Function deleted.
	* i386v4.h (HANDLE_PRAGMA): Deleted.

	* g++: Reestablish symlink to c++.
	Delete the testing of $TRACE--this could confuse people.
	Delete spurious assignment of $version.

	* tree.h (DECL_PACKED): Store this in regdecl_flag.

	* Makefile.in (LIB2FUNCS): Change _builtin_New to _caps_New.
	* libgcc2.c: Change L_builtin_New to L_caps_New.

	* dbxout.c (dbxout_symbol): Pass 3 args to eliminate_regs.
	Call alter_subreg for subregs.  Delete subreg case later on.
	Don't bother with reg_renumber--any pseudo reg is clearly
	a variable that was not allocated.
	* sdbout.c (sdbout_symbol): Call alter_subreg for subregs.
	Don't bother with reg_renumber--any pseudo reg is clearly
	a variable that was not allocated.

	* sequent.h (SIZE_TYPE): Defined.
	(LINK_LIBGCC_SPECIAL): Fix typo.

Mon Jun 29 12:04:57 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* toplev.c (rest_of_compilation): Thread the prologue and epilogue
	code immediately after reloading is done.
	* sched.c (schedule_insns): Reposition the prologue and epilogue
	notes as needed.
	* reorg.c (dbr_schedule): Ditto.
	* rtl.h (NOTE_INSN_PROLOGUE_END, NOTE_INSN_EPILOGE_BEGIN): New notes.
	* rtl.c (note_insn_name): Record them.
	* function.c (record_insns, contains, thead_prologue_and_epilogue_insns,
	reposition_prologue_and_epilogue_notes): New functions.
	* final.c: Include insn-flags.h.
	(profile_after_prologue): New function.
	(final_start_function): Use profile_after_prologue here when we
	don't HAVE_prologue.
	(final_scan_insn): Use profile_after_prologue when we scan
	NOTE_INSN_PROLOGUE_END.  (This happens when we do HAVE_prologue.)
	Perform machine specific actions when the prologue-end and
	epilogue-begin notes are scanned.
	(final_scan_insn, BARRIER): Align only when something follows.
	* Makefile.in (final.o): Depends on insn-flags.h.

	* m88k.h (FUNCTION_END_PROLOGUE, FUNCTION_BEGIN_EPILOGUE): Define.
	(DELAY_SLOTS_FOR_EPILOGUE, ELIGIBLE_FOR_EPILOGUE_DELAY): Delete.
	* m88k.md (prologue, epilogue, profiler, locate1, locate2): New
	patterns for representing prologues and epilogues.
	* m88k.c (delay_slots_for_epilogue, eligible_for_epilogue_delay,
	ok_for_epilogue_p): Delete epilogue delay slot functions.
	(m88k_begin_prologue m88k_end_prologue m88k_expand_prologue): New
	functions replacing m88k_output_prologue.
	(m88k_begin_epilogue m88k_end_epilogue m88k_expand_epilogue): Ditto.
	(preserve_registers): Delete epilogue delay slot mechanism and
	change to output insns.
	(emit_add, emit_ldst): New functions.

Sun Jun 28 23:06:04 1992  Brendan Kehoe  (brendan@cs.widener.edu)

	* Makefile.in (bootstrap, bootstrap2, bootstrap3): In each
	passage of CC, use xgcc, not gcc.
	* dostage2, dostage3: Likewise.

Sun Jun 28 09:48:18 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-decl.c (duplicate_decls): If have char *foo () and
	void *foo (...), make just a pedwarn.  Add locals oldtype, newtype.
	* c-typeck.c (self_promoting_args_p): No longer static.

	* flow.c (regno_uninitialized): Return 0 for global reg var.

	* c-typeck.c (initializer_constant_valid_p):
	Allow CONVERT_EXPR if its operand is allowable. 
	(build_c_cast): For cast to union, make a CONSTRUCTOR.

	* sparc.c (SPARC_STACK_ALIGN): Add default definition.

	* c++: Use `set "$@"' to modify arguments.
	Use a case to decide how to set $gcc.
	$quote is now empty for false and the option name for true.
	Error at end if $quote is nonempty.
	$speclang is now the -x option itself.
	Move the -v case above the -* case.

	* limitx.h: Add #ifndef.
	* limity.h: New file.
	* Makefile.in (install-limits-h): Append limity.h to the end.

	* c-typeck.c (digest_init): Don't push spellings here (for union case).
	(process_init_constructor): Fix errors for field not found.
	(build_c_cast): Fold casts to union type.

	* xm-vms.h (XREF_FILE_NAME): Fix typo.

	* i386sun.h (SIZE_TYPE): Defined.

	* Makefile.in (alloca.o): Delete the rm command.
	Use -Demacs explicitly in compilation command.
	(ALLOCA_FLAGS, ALLOCA_FINISH): Empty by default.
	* x-pa-hpux, x-rs6000, x-rs6k-mach, x-dpx2200, x-dpx2300:
	(ALLOCA_FLAGS, ALLOCA_FINISH): Deleted.
	* x-dpx2200, x-dpx2300 (AS): Deleted.

	* configure: Set broken_install for V.4.
	(i386-*-aix, ns32k-*-genix, i386-*-isc, i386-*-sco): 
	(i386-*-sco3.2v4, m88k-dg-dgux): Set broken_install.
	(m88k-*-sysv): Don't use x-m88kv3.
	* x-m88kv3: File deleted.
	* x-aix386, x-dpx2200, x-dpx2300, x-genix, x-i386isc, x-i386sco:
	* x-i386v, x-i386v4, x-i860v3, x-i860v4, x-m88kdgux, x-m88kdolph:
	* x-m88kv4, x-ncr3000, x-sparcv4, x-xenix (INSTALL): Deleted.

Sun Jun 28 08:44:32 1992  Michael Meissner  (meissner@osf.org)

	* regclass.c (record_address_regs): Make the function static to
	agree with the forward declaration.

	* mips.h (LINK_LIBGCC_SPECIAL): Define.

Sun Jun 28 06:14:56 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* expr.c (direct_load, direct_store): New variables.
	(init_expr_once): New function.
	(convert_move, convert_to_mode): Don't let gen_lowpart make a MEM in
	a mode that can't be directly copied to or from memory.
	(store_field): Don't directly store into memory in a mode that
	can't be used in a single insn.
	(expand_expr, case COMPONENT_REF): Likewise, for load.
	* toplev.c (compile_file): Call init_expr_once.

	* cse.c (fold_rtx, case SUBREG): If we can find nested SUBREGs
	with an inner register in the mode we want, get rid of all the
	SUBREGs provided they are all within a word.

	* cp-call.c, cp-class.c, cp-decl.c, cp-edsel.c, cp-lex.c: Don't
	declare xmalloc and free here.
	* cp-methods.c, cp-pt.c, cp-search.c, flow.c, integrate.c: Likewise.
	* loop.c, opjc-actions.c, reload1.c, reorg.c, rtl.c: Likewise.
	* stmt.c, tree.c, varasm.c: Likewise.
	* toplev.c (xmalloc, xrealloc): Declare return types correctly.
	* rtl.h, tree.h: Declare xmalloc and free here.
	
	* expmed.c (emit_store_flag): Keep the last target around if we
	should preserve subexpressions.

Sat Jun 27 07:11:28 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* cse.c (cse_insn): See if we have a CONST_INT that is already in
	a register in a wider mode.

	* regclass.c: Major rework of regclass pass to do a better job of
	setting up register preferences and replace the "preferred or
	nothing" method with a class that should be used if the preferred 
	class cannot be allocated.
	(MEMORY_MOVE_COST): Default value is 4, not 2.
	(move_cost, may_move_cost): New arrays.
	(init_reg_sets): Initialize them.
	(struct costs): Replaces struct savings.
	(costs): Replaces savings.
	(op_costs): New array.
	(altclass): Replaces preferred_or_nothing.
	(reg_alternate_class): New function; replaced reg_preferred_or_nothing.
	(regclass): Major rework.  Use new recording methods; make two
	passes if -fexpensive-optimizations; and refine REGNO_POINTER_FLAG
	and loop_depth setting.
	(record_reg_class): New function; replaces reg_class_record.
	(copy_cost): New function.
	(record_address_regs): Major changes.  New parameters and simplified
	and more efficient algorithm for chosing base vs. index regs.
	* rtl.h (reg_alternate_class): Declare it.
	* Makefile.in (regclass.o): Now includes reload.h and real.h.
	* flow.c (dump_flow_info): Call reg_alternate_class instead of
	reg_preferred_or_nothing.
	* reload.c (find_reloads): Likewise.
	(n_occurrences): No longer static.
	* local-alloc.c: Use register alternate class instead of 
	preferred_or_nothing uniformly; change qty_preferred_or_nothing
	to qty_alternate_class.
	* global-alloc.c (global_alloc, retry_global_alloc): Call
	reg_alternate_class instead of reg_preferred_or_nothing.
	(find_reg): Change ALL_REGS_P argument to ALT_REGS_P.
	Use alternate register class instead of ALL_REGS if can't allocate
	in preferred class.

	* cccp.c (install): Accept separate arguments for integer and
	pointer hash values; don't assume the sizes are the same.
	All callers changed.

	* rtl.c (copy_rtx, copy_most_rtx): Add new case for 'u'.

	* tree.c (make_node): Clear all of common area, in particular, flags.

	* c-tree.h, cp-tree.h: Add declaration of truthvalue_conversion.

Sat Jun 27 06:21:18 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* m88k.md (type attributes): Delete unused mbit and mfp types.
	(ffsi2 insn): Define.
	(negdf2 and absdf2 insns): Improve.

	* fold-const.c (range_test): Fix the misordered test.  Fail if VAR
	isn't an integer.

Sat Jun 27 00:54:44 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* gcc.c (link_command_spec): No %D if LINK_LIBGCC_SPECIAL.
	* sequent.h (LINK_LIBGCC_SPECIAL): Defined.

	* vax.h (PRINT_OPERAND): For SFmode, use 0f, not 0d or 0g.

	* ns32k.h (NS32K_DISPLACEMENT_P): Correct the range limits.
	* ns32k.c (print_operand_address): REG_OK_FOR_INDEX_P wants an rtx.

Fri Jun 26 08:55:03 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* fold-const.c (range_test): New function.
	(merge_component_references): Look for range tests as well.

	* va-m88k.h: Same changes as other va-*.h files below.  Make this
	work when <stdio.h> and others are included on DG/UX.

Fri Jun 26 08:17:33 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* expr.c (safe_from_p): Handle 0 in TREE_VALUE of a TREE_LIST.
	(store_constructor: Ignore empty links in element chain.

Fri Jun 26 07:06:19 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* c-convert.c (convert_to_integer): Don't add a NOP_EXPR in cases
	where we can simply change the type of the entire tree.

	* cse.c (find_best_addr): Look for equivalents of a REG that is
	the first operand of an address that is a binary operator whose
	second operand is a CONST_INT.

	* stmt.c (expand_end_bindings): Don't save argument pointer if it
	will be eliminated in favor of the frame pointer.

	* combine.c (try_combine): When using define_split to split an
	insn, first try to put the pseudo-register into the mode of
	the destination since it is the most likely to be the correct mode.

	* combine.c (make_compound_operation): Treat PLUS and MINUS
	the same when passing down the code to the next level; for
	consistency, an ASHIFT inside either gets turned into a MULT.

	* fold-const.c (optimize_bit_field_compare): Delete dead
	assignment which can sometimes reference an undefined variable.

	* genoutput.c (gen_split): Initialize n_alternatives.

	* romp.md (movdf): Fix typo in operand_subword call in define_split.

Fri Jun 26 04:38:37 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Make stdarg mechanism work with libc.
	* va-hp800.h, va-i860.h, va-i960.h, va-mips.h, va-pyr.h, va-sparc.h):
	Don't define or declare va_list; declare __gnuc_va_list.
	But only declare it once.
	Define other things only if _STDARG_H or _VARARGS_H.
	Declare va_end as well as defining it.
	* gstdarg.h: Likewise.
	If __need___va_list was defined, then undef it
	and don't define _STDARG_H.
	For all machines, declare va_list from __gnuc_va_list
	but only if _STDARG_H is defined.

	* gvarargs.h: Test _ANSI_H_, not _ANSI_H.

Thu Jun 25 23:24:02 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* ns32k.c (print_operand):
	Change NO_IMMEDIATE_PREFIX_IF_SYMBOLIC conditional to #ifdef.

	* genoutput.c (gen_split): Set d->n_alternatives.

	* Makefile.in (test-protoize-simple): Expect just 400 lines.
	(install-common-headers): When comparing srcdir with ., use pwd.

Tue Jun 16 22:11:12 1992  Jim Wilson  (wilson@sphagnum.cygnus.com)

	* Makefile.in (enquire.o): Don't delete/copy enquire.c, just use
	the copy in the source directory.

Tue Jun 25 23:52:27 1992  Howard Chu  (hyc@hanauma.jpl.nasa.gov)

	* libgcc2.c (__builtin_saveregs): Use SVR4 code on Alliant FX2800,
	but with BSD function-naming convention.

	* va-i860.h: Use SVR4 definitions of __va_saved_regs and va_list
	on Alliant FX2800.

	* fx2800.h (I860_REG_PREFIX, ASM_COMMENT_START): Deleted.
	(DBX_NO_EXTRA_TAGS, BSS_ASM_OP): Deleted.
	(ASM_OUTPUT_DOUBLE, ASM_OUTPUT_FLOAT): Deleted.
	(ASM_FILE_START): Just call output_file_directive.

Thu Jun 25 06:49:15 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-typeck.c (process_init_constructor): Strip NON_LVALUE_EXPR
	from specified array index.

	* configure (i386-*-bsd*, i386-*-mach*): Don't set tmake_file.
	They used to use t-libc-ok.

	* input.h (struct file_stack): Revert prev. change.

Thu Jun 25 06:33:52 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* stmt.c (expand_end_case): Add CASE_VALUES_THRESHOLD.
	* m88k.h (CASE_VALUES_THRESHOLD): Define.

Thu Jun 25 06:13:39 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* explow.c (plus_constant, case PLUS): Remove obsolete code;
	use recursive call in case remaining operand is one we handle.

Wed Jun 24 19:15:14 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* combine.c (subst, case PLUS): If adding two things with no bits
	in common, convert to IOR.

	* expr.c (do_jump, case BIT_AND_EXPR, COMPONENT_REF): Don't narrow
	comparison unless byte accesses are not slow and we have a
	comparison in the new mode.

Wed Jun 24 14:29:09 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* c-parse.y (primary): If built-in decl has not had
	an official declaration, print warning.
	* c-decl.c (builtin_function): Set C_DECL_ANTICIPATED for
	user-visible names.
	* c-tree.h (C_DECL_ANTICIPATED): New macro.

	* fixincludes: Make some symlinks in the `multimedia' subdir.

	* i386.c: Change #error to just error.

	* protoize.c: Normalize error message syntax.
	(process_aux_info_file): Don't delete .X file if it existed before.
	(explicity compare modtime with .c file.

Wed Jun 24 14:10:35 1992  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* sparc.c (sparc_frw_compute_frame_size): New function, for flat
	register window model support.
	(sparc_frw_save_restore): Likewise.
	(sparc_frw_output_function_prologue): Likewise.
	(sparc_frw_output_function_epilogue): Likewise.
	(sparc_frw_epilogue_delay_slots): Likewise.
	(sparc_frw_eligible_for_epilogue_delay): Likewise.

Tue Jun 23 22:36:12 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* cccp.c (rescan): Recognize # only when reading directly from a file.

	* input.h (struct file_stack): Add member `fd'.

	* regclass.c (regno_first_uid, regno_last_uid): Make elements ints.
	(reg_scan): Allocate and clear them as ints.
	* regs.h: Fix the declarations.

	* Create driver executable with name xgcc; rename to gcc in installing.
	(xgcc): Target renamed.
	(GCC_FOR_TARGET, GCC_PASSES, start.encap, specs, gcc-cross):
	(install-common, install-collect2): Rename in deps, commands or value.
	(install-collect2): Always get driver from xgcc whether cross or not.

Tue Jun 23 00:00:35 1992  Brendan Kehoe  (brendan@cs.widener.edu)

	* toplev.c (strip_off_ending): Also strip off .C and .cxx.

Tue Jun 23 18:58:43 1992  Jim Wilson  (wilson@wookumz.gnu.ai.mit.edu)

	* genrecog.c (add_to_sequence): Don't ignore mode of first operand
	of a MATCH_OPERAND or MATCH_DUP_OP rtl.
	* sparc.md (scc): Use noov_compare_op instead of normal_compare_op.

	* function.c (expand_function_start): When not optimizing, don't
	put static chain pointer in a pseudo register.

	* sparc.c (print_operand): For '*', only annul branch if
	optimizing, to avoid dbx bug.  Add '(' to handle unoptimized case.
	* sparc.h (PRINT_OPERAND_PUNCT_VALID_P): Add '('.
	* sparc.md (jump): Add '%(' to pattern.

	* c-decl.c (store_parm_decls): Change type of void parameter to
	error_mark_node.

	* configure (m68k-*-sysv4*): Use xm-m68kv.h not xm-m68kv4.h.

	* configure: Add -prefix option.

	* vax.c (split_quadword_operands): Declare paramater n.

	* i960.h (WORD_SWITCH_TAKES_ARG): Add -aux-info.

	* xcoffout.c (xcoffout_declare_function): Cast alloca result to char *.

	* c-convert.c (convert_to_integer): Don't pass truncation past
	shift that is larger than the size being truncated to.

Tue Jun 23 06:15:47 1992  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* optabs.c (expand_binop, expand_unop): Try widening before trying
	to make a library call.

	* stmt.c (expand_return): Add missing emit_queue call in tail
	recursion case.

	* cse.c (simplify_unary_operation): Add SIGN_EXTEND and
	ZERO_EXTEND to the operations we handle for wide results.

	* expr.c (emit_block_move): Convert size operand to mode that will
	be passed to emit_library_call.

Tue Jun 23 00:41:03 1992  Paul Eggert  (eggert@shadow)

	* objc-parse.y (stmt): Fix mispelling for "label" in message.

	* cccp.c: (deps_file, pipe_closed): Deleted.
	(main): Do not open deps_file until needed.
	Check error status of dep_stream and stdout more carefully.

Tue Jun 23 00:21:05 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Makefile.in (protoize.1, unprotoize.1): Rules deleted.
	(install-man, proto, realclean): Don't operate on them.
	* proto-man: File deleted.

	* protoize.c (main): Support -v as alias for -V.

Mon Jun 22 21:50:01 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* Makefile.in (compare, compare3): Discard error output from second
	tail.  If it fails, don't compare that file.

	* Makefile.in (stamp-proto): Move the touch command last.

	* cccp.c (finclude): Use xmalloc, not alloca, for file contents.

	* stmt.c (check_for_full_enumeration_handling): For a case range,
	consider all values in the range as handled.  Also, check both ends
	for being in the enumeration.

	* ns32k.h (NS32K_DISPLACEMENT_P): Wide displacement range applies to
	all models.

Mon Jun 22 20:29:47 1992  Ron Guilmette  (rfg at ncd.com)

	* expr.h (*_libfunc):  Added missing extern declarations of libfuncs
	to handle operations on/for TFmode and XFmode operands.
	* expr.c (convert_move):  Added missing code to handle moves (with
	conversion) from/to TFmode and XFmode operands.
	* optabs.c (*_libfuncs):  Added missing definitions of libfuncs
        to handle operations on/for TFmode and XFmode operands.
	(emit_float_lib_cmp):  Added missing code to handle XFmode and TFmode
	comparisons.
	(init_fixtab):  Added missing code to handle fixing (and trunc'ing)
	of XFmode and TFmode operands to various sizes of ints.
	(init_floattab):  Likewise, but for "float" operations from ints to
	either XFmode or TFmode.
	(expand_float):  Likewise.
	(expand_fix):  Likewise.
	(init_libfuncs, init_integral_libfuncs, init_floating_libfuncs): New
	functions added to initialize whole hunks of various optabs with
	appropriate `libfunc' field values.
	(init_optabs):  Use `init_integral_libfuncs' or `init_floating_libfuncs'
	wherever a group of consecutive optab entries need to all have their
	`libfunc' fields initialized.
	(init_optabs):  added missing code to handle all operations on/of
	XFmode and TFmode operands.

Mon Jun 22 06:40:32 1992  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* rs6000.h (MEMORY_MOVE_COST): Increase to 6, from 4.
	(enum reg_class, REG_CLASS_NAMES, REG_CLASS_CONTENTS): Add new reg
	classes SPEC_OR_GEN_REGS and NON_FLOAT_REGS.

	* rs6000.h (EXTRA_CONSTRAINT): Don't use indirect_operand; instead
	check explicitly.

	* rs6000.md (divmod): Use "2" constraint instead of using "q"
	twice.
	(tablejump): Constraint of "r" should be "l".

	* emit-rtl.c (init_emit): Show that all pointers into the frame are
	pointer registers.

Mon Jun 22 04:20:26 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* va-sparc.h (va_arg): Rename local identifiers to start with __.

Sun Jun 21 14:51:42 1992  Richard Stallman  (rms@mole.gnu.ai.mit.edu)

	* fold-const.c (real_value_truncate): New function.
	All calls to REAL_VALUE_TRUNCATE changed to use this function.

	* reload1.c (reload): Record which insn attains each maximum need.
	If can't find a spill, call spill_failure and return 1.
	(spill_failure): New subroutine.
	* global-alloc.c (global_alloc): Return 1 if reload returned 1.
	* toplev.c (rest_of_compilation): If they return nonzero, give up
	compiling this function.

	* c-decl.c (duplicate_decls): Never warn if redeclaring
	a predeclared function.  Use the new declaration's types
	but keep any predeclared volatile flag.
	If redeclaring builtin function, use new declaration's type.
	If an old decl becomes volatile, fix the DECL_RTL.
	* varasm.c (make_var_volatile): New function.

	* configure (mips-sony-bsd): Use xm-mips.h.
	* xm-mipsbsdn.h: File deleted.

	* protoize.c (process_aux_info_file): Simplify logic for calling
	gen_aux_info_file.  Get rid of the label `retry'.

	* m68ksgs.h (ASM_OUTPUT_REG_PUSH, ASM_OUTPUT_REG_POP):
	Override for sgs syntax.

Sun Jun 21 14:06:41 1992  Brendan Kehoe  (brendan@cs.widener.edu)

	* va-sparc.h (va_arg): Use a character array of size TYPE for
	`d' in the union, and return its dereference as TYPE.

Sun Jun 21 14:04:36 1992  Wilson Tien  (wtien at urbana.mcd.mot.com)

	* m68k.c (print_operand_address) [MOTOROLA]: Use .w and .l, not :w, :l.

Sat Jun 20 06:32:11 1992  Richard Kenner  (kenner at vlsi1.ultra.nyu.edu)

	* stor-layout.c (get_best_mode): If SLOW_BYTE_ACCESS is true, return
	widest mode (but no wider than UNITS_PER_WORD) that meets all
	the conditions.

	* combine.c (make_extraction): Always ensure we have a SUBREG when
	we make a STRICT_LOW_PART.

	* varasm.c (const_hash, compare_constant_1, record_constant_1):
	Handle case when TREE_VALUE of a constructor is zero.
	(output_constant): Use CONSTRUCTOR_ELTS.

	* cse.c (cse_insn): Memory is not invalidated by a constant
	subroutine call.
	(delete_dead_from_cse): Correctly check for being within a
	libcall block.

	* cse.c (canon_reg): Call validate_change with IN_GROUP equal to 1.
	(cse_insn): Call apply_change_group after canon_reg.
	When canonicalizing, call validate_change with IN_GROUP equal to
	one and also call when canon_reg would.

	* combine.c (subst, shift cases): Use force_to_mode in
	SHIFT_COUNT_TRUNCATED case.

	* rs6000.md: Add new pattern to split move of large constant.

	* cse.c (delete_dead_from_cse): Really delete insn instead of 
	turning it into a NOTE.

	* romp.md (shift patterns): Use QImode for count operand.

Sat Jun 20 06:31:21 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* a29k.md (storehinhww): Use inhw not inbyte.

Thu Jun 18 16:01:56 1992  Richard Kenner  (kenner@vlsi1.ultra.nyu.edu)

	* protoize.c (WIFEXITED, WEXITSTATUS): Delete unused macros.

	* combine.c (subst): If comparison operator has floating-point
	result, adjust the value returned by simplify_relational_operation
	accordingly.
	* integrate.c (subst_constants): Likewise.
	* loop.c (get_condition): Likewise.
	* cse.c (fold_rtx): Likewise.
	When returning TRUE or FALSE, handle comparisons returning
	floating-point.
	(find_comparison_args): Handle comparisons returning FP values;
	only look at STORE_FLAG_VALUE for comparisons returning integers.

	* combine.c (try_combine, subst): Pass both comparison arguments
	to SELECT_CC_MODE.
	* i386.h, i960.h, i960.c, mips.h, pa.h, pa.c, rs6000.h:
	Add second argument to SELECT_CC_MODE.
	* sparc.h, sparc.c: Likewise.

	* cse.c (insert_regs): Make a quantity for the register in a 
	SUBREG if it doesn't have one.
	(fold_rtx, case SUBREG): Always try to find a constant equivalent
	for a SUBREG; try for CONST_DOUBLE as well.
	(cse_insn): Call insert_regs on DEST if it is a SUBREG.

Thu Jun 18 15:01:29 1992  Mike Stump  (mrs@albert.gnu.ai.mit.edu)

	* c++: Allow for better quoting and -v handling.

Thu Jun 18 14:49:20 1992  Tom Wood  (wood@dg-rtp.dg.com)

    For RMS:
	* varasm.c: Declare text_section and readonly_data_section.

	* dpx2.h (CPP_SPEC): Define __HAVE_68881__ unless -msoft-float.
	DPX/2 machines all have a 68882.

	* x-i386sco (RCCFLAGS): Use -DNULL=0 to avoid suurious warnings
	from rcc.

	* seq386.h (SIZE_TYPE): The Sequent running Dynix uses int for size_t.

Thu Jun 18 14:36:41 1992  Mike Stump  (mrs@albert.gnu.ai.mit.edu)

	Merge in Cygnus sources...

	Fri Jun  5 15:00:55 1992  Mike Stump  (mrs at cygnus.com)

	* cp-typeck.c (build_c_cast): When casting, propagate const'ness
	from cast type.  When casting to a reference to T, really just
	cast to T.

	* cp-cvt.c (build_up_reference): Make a copy of a node before
	changing it.  Only propagate the const bit if we are not
	subverting it.

	Fri Jun  5 14:36:19 1992  Mike Stump  (mrs at cygnus.com)

	* cp-cvt.c (build_up_reference): When casting away const on
	references, do not report an error.

	Fri Jun  5 13:26:11 1992  Mike Stump  (mrs at cygnus.com)

	* cp-init.c (build_new): Handle new placement with arrays.

	Thu Jun  4 08:26:44 1992  Mike Stump  (mrs at cygnus.com)

	* cp-search.c (compute_visibility): DERIVED_FROM_P had its
	arguments reversed, switched them to be in the right order.
	Fixes visibility on protected members.

	Wed Jun  3 14:45:40 1992  Mike Stump  (mrs at cygnus.com)

	* cp-parse.y (unary_expr): Make it illegal to use delete on
	a pointer to a const object.  With help from Brendan Kehoe.

	Wed Jun  3 13:25:26 1992  Ken Raeburn  (Raeburn@Cygnus.COM)

	* cp-parse.y (template_instantiate_once): Set
	CLASSTYPE_GOT_SEMICOLON to eliminate messages about missing
	semicolons.

	* cp-decl.c (start_function): Don't emit error message for missing
	semicolon after class decl; that syntax (declaring both class and
	function returning that type) should be legal.  Do emit a warning if
	it's not an anonymous name.

	Mon Jun  1 18:08:09 1992  Mike Stump  (mrs at cygnus.com)

	Sat May 30 15:38:54 1992  Brendan Kehoe  (brendan@cs.widener.edu)

	* cp-decl.c (grokdeclarator): Don't allow main to be static.

	Mon Jun  1 17:52:24 1992  Mike Stump  (mrs at cygnus.com)

	Sat May 30 15:38:54 1992  Brendan Kehoe  (brendan@cs.widener.edu)

	* cp-decl.c (poplevel): Use DECL_INITIAL to detect undef label
	instead of DECL_SOURCE_LINE.

	Mon Jun  1 17:22:54 1992  Mike Stump  (mrs at cygnus.com)

	* cp-parse.y (unary_expr): Don't allow old placement syntax(with {})
	nor dynamic with new (with ()) new placement syntax.  Completes May 27
	fix.

	Mon Jun  1 13:57:28 1992  Mike Stump  (mrs at cygnus.com)

	* cp-type2.c (digest_init): Trailing '\0' is never ignored in
	initializations using strings in ANSI draft C++ unlike ANSI C.

	Mon Jun  1 07:18:13 1992  Michael Tiemann  (tiemann at rtl.cygnus.com)

	* cp-decl.c (pushdecl): Re-fix May 12 change regarding DECL_CONTEXT.
	* cp-call.c (build_method_call): Go back to using DECL_CONTEXT
	instead of DECL_CLASS_CONTEXT.  DECL_CONTEXT says when a function
	was first declared virtual in a class, which is needed information
	in case the virtual function comes from a virtual baseclass (because
	the derived class won't have a vtable entry for that function (if it
	has a vtable at all!)).

	Wed May 27 17:05:50 1992  Mike Stump  (mrs at cygnus.com)

	* cp-parse.y (unary_expr): Handle new placement syntax, desupport
	the old placement syntax with a pedwarn.

	Tue May 26 17:30:28 1992  Mike Stump  (mrs at cygnus.com)

	Thu May 21 17:13:38 1992  Michael Tiemann  (tiemann at cygnus.com)

	* cp-decl.c (grok_enum_decls): Allow reference to nested enums from
	other classes for NICHL.

	Tue May 26 15:31:30 1992  Mike Stump  (mrs at cygnus.com)

	* cp-*.[chy]: Always include "assert.h" and not <assert.h> to
	be consistent.

	Tue May 26 10:07:02 1992  Mike Stump  (mrs at cygnus.com)

	* cp-parse.y (return_init): Fix simple typo that caused '='
	initialized named return values to fail.

	Mon May 25 11:42:18 1992  Mike Stump  (mrs at cygnus.com)

	* cp-parse.y (component_decl): Handle anonymous unions as before,
	except check to make sure it is really an anonymous union.

	Sat May 23 23:37:38 1992  Mike Stump  (mrs at cygnus.com)

	* cp-tree.c (layout_basetypes): Don't core dump on erroneous input.

	Sat May 23 22:04:31 1992  Mike Stump  (mrs at cygnus.com)

	* cp-typeck.c (c_expand_start_case): build_type_conversion can
	return a NULL_TREE, so don't try and find a code or type of it.

	Wed May 20 09:09:08 1992  Michael Tiemann  (tiemann@rtl.cygnus.com)

	* cp-call.c (build_method_call): Use DECL_CLASS_CONTEXT, not
	DECL_CONTEXT to find the class in which FUNCTION was declared (for
	non-virtual calls).

	Tue May 19 02:08:39 1992  Mike Stump  (mrs at cygnus.com)

	* cp-parse.y (component_decl): Remove some bogus code that
	prevents empty nested union definitions from compiling.

	Tue May 19 01:08:23 1992  Mike Stump  (mrs at cygnus.com)

	* cp-decl.c (grokfndecl): Propagate volatile from type of
	function out to the decl for the function.

	Mon May 18 17:19:39 1992  Mike Stump  (mrs at rtl.cygnus.com)

	* cp-search.c (get_binfo): Since unions cannot participate in
	inheritance relationships, return 0 instead of aborting.

	Fri May 15 13:37:40 1992  Mike Stump  (mrs at cygnus.com)

	* cp-parse.y (template_type_name): Handle
	template<class T> class task { friend task<T>* preempt(task<T>*); };
	syntax.

	* cp-pt.c (lookup_template_class): Ditto.

	Thu May 14 22:54:17 1992  Mike Stump  (mrs at cygnus.com)

	* cp-tree.c (layout_basetypes): Don't warn about non-virtual
	destructors unless the user asks with -Wall.

	Thu May 14 22:38:54 1992  Mike Stump  (mrs at cygnus.com)

	* cp-type2.c (build_functional_cast): exp may be an error_mark_node,
	don't crash when it is.

	Thu May 14 18:56:26 1992  Mike Stump  (mrs at cygnus.com)

	* cp-decl.c (hack_incomplete_structures): Test for underflow
	before decreamenting n_incomplete in current_binding_level, since
	it is unsigned.	

	Tue May 12 15:52:49 1992  Mike Stump  (mrs at cygnus.com)

	Mon May 11 14:10:50 1992  Ron Guilmette (rfg at ncd.com)

	* cp-decl.c (poplevel): Reconciled with recent changes made to the
	`poplevel' routine in c-decl.c.  The changes here cause LABEL_DECL
	nodes to be attached (as the BLOCK_VARS chain) to the BLOCK node
	which represent the outermost scope of the function.

	Mon May 11 12:35:44 1992  Ron Guilmette  (rfg at ncd.com)

	* cp-class.c (finish_struct): Check DECL_CONTEXT to see if it is
	any sort of a type (e.g. struct *or* union) rather than just
	checking it to see if it's a RECORD_TYPE.
	* cp-decl.c (pushdecl): Set DECL_CONTEXT of pushed ..._DECL node,
	just as is done in c-decl.c.
	(pushdecl): Delete useless variable `cntxt'.
	(finish_decl): Set TREE_USED rather than DECL_FROM_INLINE in order
	to prevent "unused" warnings.
	(finish_function): Check DECL_CONTEXT to see if it is a type.
	(finish_function): Fixed indentation problem.
	* cp-gc.c (build_m_desc): Check DECL_CONTEXT to see if it is a type.
	* cp-init.c (build_virtual_init): Fix indentation.
	* cp-lex.c (store_pending_inline): Check DECL_CONTEXT to see if it
	is a type.
	* cp-pt.c (tsubst, do_pending_expansions): Check DECL_CONTEXT to see
	if it is a type.
	* cp-typeck.c (mark_addressable): Check DECL_CONTEXT to see if it is
	any sort of a type (e.g. struct *or* union) rather than just
	checking it to see if it's a RECORD_TYPE.

	Tue May 12 08:52:06 1992  Michael Tiemann  (tiemann@rtl.cygnus.com)

	* cp-typeck.c (build_component_ref): Call `break_out_cleanups'.
	Also clean up indentiation.

	Mon May 11 23:14:04 1992  Mike Stump  (mrs at cygnus.com)

	* cp-decl.c (pushtag): Handle structure tags in the same way as the
	C front-end.  This completes a change that rms put in on 3/12/92 and
	I put in the Cygnus tree on 3/13/92 and Mark Eichin took back out on
	3/18/92.

	Sun May  3 00:29:59 1992  Mike Stump  (mrs at cygnus.com)

	* cp-lex.c (copy_lang_decl, store_pending_inline): Cast
	arguments to bcopy to be char *.

	Fri May  1 12:22:31 1992  Michael Tiemann  (tiemann@cygnus.com)

	* cp-init.c (expand_aggr_init, expand_vec_init): When comparing
	array types, use `comptypes' instead of ==, since two array types
	may be structurally identical but not == if one was defaulted from
	an initializer.

	Wed Apr 29 01:25:25 1992  Mike Stump  (mrs at cygnus.com)

	* cp-init.c (do_friend): Check that PREVIOUS_DECL is non-NULL.

Thu Jun 18 14:15:07 1992  Torbjorn Granlund  (tege@hal.gnu.ai.mit.edu)

	* pa.md (insv): Use `+' for operand 0 constraint.

Thu Jun 18 13:39:22 1992  Michael Meissner  (meissner@osf.org)

	* mips.h (MIPS_VERSION): Bump Meissner version # to 20.
	(final_prescan_insn): Add declaration.
	(FINAL_PRESCAN_INSN): Just call final_prescan_insn.
	(CONST_OK_FOR_LETTER_P): Rewrite some tests, so that they will
	work on host systems with 64 bit integers.

	* mips.c (large_int): Rework, so that we don't get funny boundary
	conditions on systems with 64 bit integers.
	(mips_move_1word): Just use li to load constants that can be done
	with lui, instead of issuing the lui, since the GAS bug that
	generated two instructions has been fixed.
	(final_prescan_insn): Move the checking for filling the delay
	slots here from the FINAL_PRESCAN_INSN macro.

	* mips.md (andsi3, iorsi3, xorsi3): Make the constraints match
	the real machine (the predicate still is more general in order
	to optimize bitfields at the expense of not CSE'ing large
	constants used in logical ops, and making reload load it into
	a scratch register).  Don't use $1 as a temporary register any
	more.

	* varasm.c (decode_reg_name): If `memory' return -4.

	* stmt.c (expand_asm_operands): If `memory' is used as a clobbered
	register, emit a (clobber (const_int 0)) to force the compiler not
	to cache memory values in registers across the assembly
	instruction(s).

	* mips-tfile.c (read_line): Semicolons within strings are not
	counted as statement separators.

	* collect2.c (scan_prog_file, OSF/rose case): Cast pointer arguments
	to bcopy to generic * to avoid warnings.

Thu Jun 18 12:04:53 1992  David J. MacKenzie  (djm@wookumz.gnu.ai.mit.edu)

	* c++: If given -v with no file args, don't pass the libraries to
	gcc.

Thu Jun 18 10:34:22 1992  Tom Wood  (wood@dg-rtp.dg.com)

	* expr.c (expand_builtin, BUILT_IN_FSQRT): Emit queue of increment
	instructions before starting a sequence that may get thrown away.

See ChangeLog.5 for earlier changes.
