Changes for GCC version 2.8.1 from version 2.8.0. Before applying these diffs, go to the directory gcc-2.8.0 and execute the following command: rm config/vax/x-vax Then use the command patch -p1 feeding it the following diffs as input. Then rename the directory to gcc-2.8.1. Changes in files you can reconstruct with Bison, etags, makeinfo, autoconf, autoheader, and TeX have been omitted. Some of these files are updated just by building the compiler. You update configure by executing this comment autoconf in the directory in which you unpacked the sources. After you have rebuilt the compiler, you can update rest of these files by executing this command make TAGS info dvi in the same directory, provided the necessary tools (etags, makeinfo, TeX and texi2dvi) are installed. diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/ChangeLog gcc-2.8.1/ChangeLog *** gcc-2.8.0/ChangeLog Wed Jan 7 18:03:17 1998 --- gcc-2.8.1/ChangeLog Tue Mar 3 21:32:16 1998 *************** *** 1,2 **** --- 1,658 ---- + Mon Mar 2 08:06:58 1998 Richard Kenner + + * Version 2.8.1 released. + + * Makefile.in (mostlyclean): Remove duplicate deletion of temp + files. Delete more stamp files and [df]p-bit.c + (clean): Don't delete stamp files here. + (VERSION_DEP): New variable. + (distdir-finish): Pass a value of null for it. + (version.c): Use it. + Avoid broken pipe with cvs log. + + * objc/Make-lang.in (objc/runtime-info.h): Rename emptyfile to + tmp-runtime and delete at end. + + Sun Mar 1 05:50:25 1998 Richard Kenner + + * tree.c (build_reference_type): Handle obstacks like + build_pointer_type. + + * Makefile.in (tmp-gcc.xtar): Renamed from gcc.xtar. + (gcc.xtar.gz): Deleted; merged with `dist'. + (diff): Create gcc-$(oldversion)-$(version).diff. + (distdir): Depend on distdir-cvs. + (distdir-cvs): New rule. + (distdir-start): Depend on version.c and TAGS. + (TAGS): Use tmp-tags instead of temp. + (dist): Create gcc-$(version).tar.gz. + + * varasm.c (compare_constant_1): Fix typo in previous change. + + * objc/Make-lang.in (objc-distdir): Properly rebuild objc-parse.c. + + Sat Feb 28 16:58:08 1998 Tristan Gingold + + * stmt.c (expand_decl): If -fcheck-memory-usage, put vars in memory. + * expr.c (get_memory_usage_from_modifier): Convert + EXPAND_{CONST_ADDRESS, INITIALIZER} to MEMORY_USE_DONT. + + Sat Feb 28 08:13:43 1998 Richard Kenner + + * i860/fx2800.h (DATA_ALIGNMENT): Use POINTER_TYPE_P. + * m68k/a-ux.h (FUNCTION_VALUE): Likewise. + * expr.c (get_pointer_alignment, compare, do_store_flag): Likewise. + (expand_builtin): Likewise. + * fold-const.c (force_fit_type, fold_convert, fold): Likewise. + * function.c (assign_parms): Likewise. + * integrate.c (expand_inline_function): Likewise. + * sdbout.c (sdbout_field_types): Likewise. + * tree.c (integer_pow2p, tree_log2, valid_machine_attribute): Likewise. + * stmt.c (expand_decl): Likewise. + ({,bc_}expand_decl_init): Also test for REFERENCE_TYPE. + + * configure.in (version_dep): New variable; if srcdir is CVS working + directory, set to ChangeLog. + (version): Supply default if no version.c. + * Makefile.in (version.c): New rule. + + * gcc.c (snapshot_warning): New function. + (main): Call it for snapshots. + + * dwarf2out.c (expand_builtin_dwarf_reg_size): If reg_raw_mode + not valid for reg, use last size. Also refine range assertion. + + Sat Feb 28 05:04:47 1998 Michael P. Hayes + + * enquire.c (cprop): Don't perform exhaustive search for char_min + and char_max when bits_per_byte > 16. + + Thu Feb 26 15:12:03 1998 Christopher Taylor + + * fixincludes: Avoid using '0-~' in egrep. + + Thu Feb 26 08:04:05 1998 Tristan Gingold + + * function.c (assign_parms): Call 'chkr_set_right' when DECL_RTL + is stack_parm. + * expr.c (get_memory_usage_from_modifier): Convert + EXPAND_{SUM, CONST_ADDRESS, INITIALIZER} to MEMORY_USE_RO. + + Thu Feb 26 07:33:53 1998 Paul Eggert + + * c-lex.c (yylex): Don't munge errno before using it. + * cccp.c (error_from_errno, perror_with_name): Likewise. + * cpplib.c (cpp_error_from_errno): Likewise. + * gcc.c (pfatal_pexecute): Likewise. + * protoize.c (safe_write, find_file, process_aux_info_file): Likewise. + (rename_c_file, edit_file): Likewise. + + * c-lex.c (yylex): Remove unused variable exceeds_double. + + Thu Feb 26 07:05:14 1998 Michael P. Hayes + + * reorg.c (fill_slots_from_thread): Don't steal delay list from target + if condition code of jump conflicts with opposite_needed. + + Thu Feb 26 06:45:23 1998 Richard Kenner + + * Makefile.in (distdir-start): Don't copy CVS subdirectory of config. + + * varasm.c ({compare,record}_constant_1, case CONSTRUCTOR): + Handle the case when we have TREE_PURPOSE values. + + Thu Feb 26 05:59:01 1998 Philippe De Muyter + + * fixincludes (sys/limits.h): Fix a nested comment problem with + HUGE_VAL definition on sysV68 R3V7.1. + + Wed Feb 25 21:09:38 1998 Philippe De Muyter + + * toplev.c (TICKS_PER_SECOND): Renamed from CLOCKS_PER_SECOND. + + Wed Feb 25 20:50:08 1998 Michael P. Hayes + + * reorg.c (fill_slots_from_thread): Mark resources referenced in + opposite_needed thread. Return delay_list even when cannot get + any more delay insns from end of subroutine. + + Wed Feb 25 19:50:01 1998 Mikael Pettersson + + * gcc.c (lookup_compiler): Remove redundant test. + + Wed Feb 25 07:24:22 1998 Richard Kenner + + * vax.md (call insns): Second operand to CALL rtl is SImode. + + * configure.in (i[34567]86-*-mingw32): Support msv and crt suffix. + * i386/crtdll.h: New file. + + * sparc.c (pic_setup_code): If -O0, write USE of pic_offset_table_rtx. + + * expr.c (safe_from_p): Add new arg, TOP_P; all callers changed. + + Sat Feb 21 07:02:39 1998 Jim Wilson + + * mips/iris5.h (DWARF2_UNWIND_INFO): Define to 0. + * mips/iris5gas.h (DWARF2_UNWIND_INFO): Define to 1. + + Fri Feb 20 08:27:46 1998 Paul Eggert + + * sparc/sol2-sld.h: New file. + * configure.in (sparc-*-solaris2*): Use it when using system linker. + * toplev.c (main): Don't default to DWARF2_DEBUG with -ggdb + if LINKER_DOES_NOT_WORK_WITH_DWARF2 is defined. + + Fri Feb 20 08:21:49 1998 H.J. Lu (hjl@gnu.org) + + * alpha/elf.h (STARTFILE_SPEC, ENDFILE_SPEC): Support shared library. + (LIB_SPEC, DEFAULT_VTABLE_THUNKS): Defined #ifndef USE_GNULIBC_1. + * sparc/linux.h (DEFAULT_VTABLE_THUNKS): Likewise. + (LIB_SPEC): Add -lc for -shared #ifndef USE_GNULIBC_1. + * linux.h (LIB_SPEC): Likewise. + * sparc/linux64.h (LIB_SPEC): Likewise; also updated for glibc 2. + (LIBGCC_SPEC): Removed. + (CPP_SUBTARGET_SPEC): Add %{pthread:-D_REENTRANT}. + + Fri Feb 20 05:22:12 1998 Richard Kenner + + * Makefile.in (distdir-start): Add dependence on bi-parser.[ch]. + + Thu Feb 19 18:07:11 1998 Jim Wilson + + * m68k.h (TARGET_SWITCHES): For 68000, 68302, subtract MASK_68881. + For 68303, 68332, cpu32, subtract MASK_68040_ONLY. + + Wed Feb 18 09:37:29 1998 Paul Eggert + + * fixincludes (stdlib.h): Do not double-wrap the size_t typedef. + + Wed Feb 18 07:32:11 1998 Jim Wilson + + * i960.c (emit_move_sequence): Handle unaligned stores to pseudos. + * i960.md (store_unaligned_[dt]i_reg): Handle register dest. + (store_unaligned_ti_reg): Likewise. + + * m68k.h (MACHINE_STATE_{SAVE,RESTORE} [MOTOROLA]): Add %# and %/; + add : to make them into extended asms. + + Wed Feb 18 07:08:05 1998 Richard Kenner + + * reg-stack.c (compare_for_stack_reg): Only handle FP conditional + move as next insn specially. + + * reload.c (find_reloads): Always convert address reload for + non-reloaded operand to RELOAD_FOR_OPERAND_ADDRESS. + + * emit-rtl.c (hard-reg-set.h): Include. + (get_lowpart_common): Don't make new REG for hard reg in a + class that cannot change size. + * Makefile.in (emit-rtl.o): Depend on hard-reg-set.h. + + Sat Feb 14 09:59:00 1998 Richard Earnshaw (rearnsha@arm.com) + + * arm.md (movsfcc): Also validate operands[3] for hard float. + (movdfcc): Only accept fpu_add_operand for operands[3].8 + + Sat Feb 14 09:32:34 1998 Jim Wilson + + * dwarf2out.c (expand_builtin_dwarf_reg_size): New variable mode. + Convert CCmode to word_mode before calling GET_MODE_SIZE. + + Sat Feb 14 09:27:42 1998 David Edelsohn + + * rs6000.h (MY_ISCOFF): Check for U803XTOCMAGIC. + + Sat Feb 14 08:29:43 1998 Arvind Sankar + + * t-svr4 (TARGET_LIBGCC_CFLAGS): New definition. + + Sat Feb 14 07:45:16 1998 Ken Rose (rose@acm.org) + + * reorg.c (fill_slots_from_thread): New parameter, delay_list. + All callers changed. + + Sat Feb 14 07:14:02 1998 Richard Kenner + + * reload.c (debug_reload): Properly output insn codes. + + * pa.c (emit_move_sequence): If in reload, call find_replacement. + + * gansidecl.h (bcopy, bzero, {,r}index): Don't define if IN_LIBGCC2. + + * combine.c (distribute_notes, case REG_DEAD): When seeing if place + to put new note sets register, use reg_bitfield_target_p, as in + original code. + + * gcc.c (process_command): If file is for linker, set lang to "*". + (lookup_compiler): Return 0 for language of "*". + + * sched.c (attach_deaths, case SUBREG): Fix error in last change. + + * i386.md (mov[sdx]fcc): Disable for now. + (mov[sd]fcc_1): Add earlyclobber for output on last alternative. + + Sat Feb 14 06:42:50 1998 Jason Merrill + + * except.c (get_dynamic_handler_chain): Only make call once per func. + (expand_fixup_region_{start,end}): New functions. + (expand_eh_region_start_tree): Store cleanup into finalization here. + * stmt.c (expand_cleanups): Use new functions to protect fixups. + + * except.c (get_dynamic_handler_chain): Build up a FUNCTION_DECL. + * optabs.c (init_optabs): Don't init get_dynamic_handler_chain_libfunc. + * expr.h (get_dynamic_handler_chain_libfunc): Deleted. + + Sat Feb 14 06:34:41 1998 Peter Lawrence + + * optabs.c (emit_conditional_move): Don't reverse condition for FP. + + Fri Feb 13 07:22:04 1998 Richard Kenner + + * Makefile.in (mostlyclean): Only use s-* convention for stamp + files in main dir. + + * configure.in: Add support for i786 (Pentium II); same as i686. + + Thu Feb 12 20:16:35 1998 Michael Meissner + + * rs6000.md: Replace gen_rtx (CONST_INT,...) with GEN_INT. + + Thu Feb 12 10:08:14 1998 John Hassey + + * configure.in (i[3456]86-dg-dgux*): Don't need fixincludes. + + Thu Feb 12 07:27:39 1998 Mumit Khan + + * i386/cygwin32.h (NO_IMPLICIT_EXTERN_C): Define. + about system headers. + (LIB_SPEC): Add -ladvapi32 -lshell32. + + Thu Feb 12 07:19:31 1998 Richard Kenner + + * expr.c (expand_assignment): Fix typo in checking OFFSET. + + * gbl-ctors.h (atexit): Don't define unless needed. + + * combine.c (distribute_notes): Completely check for note operand being + only partially set on potential note target; adjust what notes + we make in that case. + + * i386/xm-go32.h (HAVE_{BCOPY,BZERO,INDEX,RINDEX}): Deleted. + + Wed Feb 11 08:53:27 1998 Richard Kenner + + * calls.c (emit_call_1): Size args now HOST_WIDE_INT. + (expand_call): struct_value_size now HOST_WIDE_INT. + + Tue Feb 10 09:04:39 1998 Richard Kenner + + * integrate.c (initialize_for_inline): Ensure DECL_INCOMING_RTL + is always copied. + + Tue Feb 10 06:10:49 1998 Paul Eggert + + * cccp.c (rescan): Fix bug with macro name appearing + immediately after L'x'. + + Mon Feb 9 20:45:32 1998 Andreas Schwab + + * c-common.c (format_char_info): Add new field zlen. + (print_char_table): Remove entry for 'Z' as a format character. + Initialize zlen field as appropriate. + (scan_char_table): Set zlen field to NULL in each entry. + (check_format_info): Recognize 'Z' as a length modifier, with a + warning in pedantic mode. + Avoid infinite loop when a repeated flag character is detected. + + Mon Feb 9 09:24:04 1998 Paul Eggert + + * c-parse.in (primary): Minor wording fix in diagnostic. + + Mon Feb 9 07:50:19 1998 Richard Kenner + + * c-decl.c (grokdeclarator): Remove warning on inline of varargs. + + * reload.c (find_reloads): Check for const_to_mem case before + checking for invalid reload; use force_const_mem if no_input_reloads. + + * function.c (push_function_context_to): Call init_emit last. + + * protoize.c (my_link): Define as -1 in mingw32. + (link): Remove declaration. + + * rs6000.c (setup_incoming_varargs): Always set rs6000_sysv_varargs_p. + + * integrate.c (expand_inline_function): Clear label_map with bzero. + + * unroll.c (copy_loop_body, case JUMP_INSN): Correct error in last + change: call single_set on COPY, not INSN. + + Sun Feb 8 08:07:37 1998 Richard Kenner + + * msdos/top.sed, winnt/config-nt.sed: Change version number to 2.8.1. + + * configure.in (i[3456]86-*-sco3.2v5*): Use cpio for headers. + + Sat Feb 7 07:32:46 1998 Richard Kenner + + * i386/mingw32.h (LIBGCC_SPEC, STARTFILE_SPEC, MATH_LIBRARY): + Use msvcrt, not crtdll. + + Fri Feb 6 20:32:06 1998 Geert Bosch + + * i386/xm-os2.h (EMX, USG, BSTRING, HAVE_{PUTENV,VPRINTF,STRERROR}): + Define ifdef __EMX__. + (strcasecmp): Define to be stricmp if __EMX__. + (spawnv{,p}): Don't define if EMX. + (OBJECT_SUFFIX): Don't define if EMX. + (MKTEMP_EACH_FILE): Define. + + Fri Feb 6 16:37:29 1998 Kaveh R. Ghazi + + * objc/Make-lang.in (objc.stage1): Depend on stage1-start. + (objc.stage2, objc.stage3, objc.stage4): Likewise for the + respective stageN-start targets. + (objc/sendmsg.o): Depend on objc/runtime-info.h. + + Fri Feb 6 16:27:09 1998 Bernd Schmidt + + * stmt.c (expand_asm_operands): Properly treat asm statement + statements with no operands as volatile. + + Fri Feb 6 16:03:25 1998 Greg McGary + + * c-decl.c (pushdecl): Set DECL_ORIGINAL_TYPE once only. + + Fri Feb 6 15:57:36 1998 Mumit Khan + + * i386/cygwin32.h (STRIP_NAME_ENCODING): New macro. + + Fri Feb 6 15:50:42 1998 Paul Eggert + + * libgcc2.c (__floatdi[xtds]f): Round properly even when rounding + large negative integer to plus or minus infinity. + + Fri Feb 6 15:45:16 1998 Philippe De Muyter + + * sdbout.c (plain_type_1): Return T_DOUBLE, not T_VOID, for + long double #ifndef EXTENDED_SDB_BASIC_TYPES. + + Fri Feb 6 15:23:49 1998 John David Anglin + + * vax/ultrix.h (HAVE_ATEXIT): Define. + * x-vax: File deleted. + + Fri Feb 6 14:34:19 1998 Douglas Rupp + + * gcc.c (process_command, case "-dumpversion"): Print spec_version. + + Fri Feb 6 11:01:13 1998 Josh Littlefield + + * i386/gmon-sol2.c (internal_mcount): Do set-up when program starts + and install hook to do clean-up when it exits. + * i386/sol2-c1.asm (_mcount): Make a weak instead of global symbol. + * i386/sol2dbg.h (ASM_SPEC): Support Solaris bundled assembler's -V + argument; pass -s argument to assembler. + + Fri Feb 6 09:13:21 1998 Jim Wilson (wilson@cygnus.com) + + * function.c (assign_parms): New variable named_arg, with value + depending on STRICT_ARGUMENT_NAMING. Use instead of ! last_named. + + * crtstuff.c (__frame_dummy): New function for irix6. + (__do_global_ctors): Call __frame_dummy for irix6. + * mips/iris6.h (LINK_SPEC): Hide __frame_dummy too. + + Fri Feb 6 09:08:21 1998 Mike Stump + + * rtlanal.c (dead_or_set_regno_p): Ignore REG_DEAD notes after reload. + * genattrtab.c (reload_completed): Define. + + * configure.in (i960-wrs-vxworks): Same as i960-wrs-vxworks5*. + + Fri Feb 6 08:47:38 1998 Richard Kenner + + * Makefile.in (diff): Add INSTALL, configure, and config.in; + remove objc-*. + * objc/config-lang.in (diff_excludes): Add objc-parse.[cy]. + + * i386/xm-mingw32.h (link): Delete macro. + + * alpha.c (output_prolog): Write out frame sizes as longs and + print too large sizes as zero. + + * function.c (combine_temp_slots): No need to allocate and free rtx. + Don't do anything if too many slots in the list. + (put_var_into_stack): Don't use ADDRESSOF if not optimizing. + + * function.c (purge_addressof_1): Force into mem if VOLATILE reference. + + * calls.c (expand_call): Show VAR_DECL made for structure return + address is used; remove bogus set of MEM_IN_STRUCT_P. + * expr.c (expand_expr, case SAVE_EXPR, case TARGET_EXPR): Show used. + (expand_builtin, case BUILT_IN_LONGJMP): Show __dummy used. + * function.c (put_reg_into_stack): New arg USED_P; all callers changed. + + * expr.c (expand_expr, case SAVE_EXPR): assign_temp with KEEP of 3. + * function.c (var_temp_slot_level): New variable. + (push_function_context_to, pop_function_context_from): Save/restore + it and target_temp_slot_level. + (assign_stack_temp): Implement KEEP of 3. + (push_temp_slots_for_block): New function. + (init_temp_slots): Initialize var_temp_slot_level. + * function.h (struct function, fields {var,target}_temp_slot_level): + New fields. + * stmt.c (expand_start_bindings): Call push_temp_slots_for_block. + + * function.c (struct temp_slot): SIZE, BASE_OFF_SET, and FULL_SIZE + now HOST_WIDE_INT. + (assign_{,outer_}stack_local, assign_{,stack_}temp): Size arg is + now HOST_WIDE_INT. + (assign_stack_temp): Do size computations in HOST_WIDE_INT. + (fixup_var_refs_1, optimize_bit_field, instantiate_decls): Likewise. + (instantiate_virtual_regs_1, fix_lexical_address): Likewise. + * rtl.h (assign_stack_{local,temp}): Size arg is HOST_WIDE_INT. + (assign_temp): Likewise. + * expr.h (struct args_size): Field CONSTANT is now HOST_WIDE_INT. + + * sched.c (attach_deaths, case REG): Don't check for REG_UNUSED. + (attach_deaths, case SUBREG, STRICT_LOW_PART, {ZERO,SIGN}_EXTRACT): + Don't pass set_p of 1 if partial assignment. + + * tree.h (size_in_bytes): Returns HOST_WIDE_INT. + * tree.c (size_in_bytes): Likewise. + Tighen up logic some to avoid returning a bogus value instead of -1. + + * expr.c (get_inner_reference, case ARRAY_EXPR): Make WITH_RECORD_EXPR + just for index. + (expand_expr, case PLACEHOLDER_EXPR): Refine search again; look + at each expression and look for pointer to type. + + * expr.c (safe_from_p, case ADDR_EXPR): If TREE_STATIC, no trampoline. + (expand_expr, case ADDR_EXPR): Likewise. + + * expr.c (emit_block_move): Use conservative range for movstr mode. + + * configure.in: See if "cp -p" works if "ln -s" doesn't; else "cp". + + * combine.c (try_combine.c): Pass elim_i2 and elim_i1 to + distribute_notes for i3dest_killed REG_DEAD note. + + * configure.in (mips-dec-netbsd*): Remove bogus setting of prefix. + + * c-decl.c (duplicate_decls): Set DECL_IGNORED_P in newdecl if + different bindings levels. + + * configure.in: Test ln -s by symlinking gcc.c. + + * configure.in (i[3456]86-dg-dgux): Add wildcard for version. + + * crtstuff.c (__do_global_ctors_aux): Switch back to text section + in proper place. + + * rtlanal.c (rtx_varies_p, case REG): pic_offset_table_rtx is fixed. + * genattrtab.c (pic_offset_table_rtx): Define (dummy). + * cse.c (set_nonvarying_address_components): Understand PIC refs. + + * loop.c (strength_reduce): When placing increment for auto-inc + case, do comparison in loop order. + + * i860.c (output_delayed_branch): Add missing arg to recog. + (output_delay_insn): Add missing arg to constrain_operands. + + * configure.in: Truncate target after finished comparing it with host. + + * i386.h (MAX_FIXED_MODE_SIZE): Delete. + + * c-parse.in (expr_no_comma): Clarify undefined error. + + * prefix.c (get_key_value): Don't default to PREFIX here. + (translate_name): Remove bogus addition of "$" if getenv fails; + clean up application of default value of PREFIX. + + * fold-const.c (fold_convert): Call force_fit_type even if input + already overflows. + + Fri Feb 6 07:45:01 1998 Robert Hoehne + + * i386/xm-go32.h (HAVE_{BCOPY,BZERO,BCMP,RINDEX,INDEX}): Define. + + * gcc.c (main): Treat paths starting with '$' or DOS drives + as absolute in standard_startfile_prefix. + + Thu Feb 5 21:07:12 1998 John David Anglin + + * cpplib.c (IS_INCLUDE_DIRECTIVE_TYPE): Add casts from enum to int. + * cccp.c (IS_INCLUDE_DIRECTIVE_TYPE, handle_directive): Likewise. + + Thu Feb 5 19:00:44 1998 Richard Kenner + + * expr.c (expand_expr, case CONSTRUCTOR): Correct shift count + when making signed bit field; use EXPAND_NORMAL, not 0. + + Thu Feb 5 17:42:43 1998 Manfred Hollstein + + * libgcc2.c (__clear_insn_cache): On sysV68 enable the memctl + stuff only if MCT_TEXT is #define'd. + + Thu Feb 5 17:32:01 1998 Robert Hoehne + + * Makefile.in: Changed most stamp-* to s-*. + + Tue Feb 3 19:45:50 1998 James Hawtin + + * i386/sol2.h (STARTFILE_SPEC, LIB_SPEC): Update -pg files. + * configure.in (i[3456]86-*-solaris2*): Add gcrt1.o and gmon.o + to extra_parts. + + Tue Feb 3 17:28:48 1998 Christopher C Chimelis + + * configure.in (alpha*-*-linux-gnu*): Add extra_parts for crtstuff. + + Tue Feb 3 17:18:19 1998 Richard Earnshaw + + * arm.c (find_barrier): Fix one-too-many bug if fail to find barrier. + + * arm.c (arm_reload_in_hi): Handle cases where the MEM is too + complex for a simple offset. + + Tue Feb 3 16:14:21 1998 Robert Hoehne + + * i386/xm-go32.h (EXECUTABLE_SUFFIX): Define. + + * configure.in (i[3456]86-pc-msdosdjgpp*): New entry. + + Tue Feb 3 07:33:58 1998 Richard Kenner + + * explow.c (probe_stack_range): Properly check for small + number of probes. + + * gcc.c (process_command, case 'V'): Validate arg. + + * configure.in (sbrk): Add check for needed declaration. + * acconfig.h (NEED_DECLARATION_SBRK): New entry. + * toplev.c (sbrk): Update declaration conditional. + * mips-tfile.c (sbrk, free): Likewise. + + * sparc/sysv4.h (DBX_REGISTER_NUMBER): Remove abort. + + * mips.c (mips_expand_prologue): Pass reg 25 to gen_loadgp. + * mips.md (loadgp): Add second operand for register number to add. + (builtin_setjmp_receiver): Pass new label and reg 31 to loadgp. + + * toplev.c: Include insn-codes.h, insn-config.h, and recog.h. + (compile_file): Try to emit nop to separate gcc_compiled symbol. + * Makefile.in (toplev.o): Depends on insn-{codes,config}.h, recog.h. + + Tue Feb 3 06:58:46 1998 Mark Mitchell + + * integrate.c (get_label_from_map): New function. + (expand_inline_function): Use it. + Initialize label_map to NULL_RTX instead of gen_label_rtx. + (copy_rtx_and_substitute): Use get_label_from_map. + * integrate.h (get_label_from_map): New function. + (set_label_from_map): New macro. + * unroll.c (unroll_loop, copy_loop_body): Use them. + + Mon Feb 2 16:33:01 1998 Richard Kenner + + * i386.md (mov{si,hi,sf,df,xf}cc{,_1}): Remove cases with branches. + + * rs6000/x-aix31 (INSTALL): Deleted. + * mips/x-dec-osf1, mips/x-osfrose, i386/x-osfrose: Likewise. + * arm/x-riscix: Likewise. + + * c-typeck.c (signed_or_unsigned_type): Properly handle pointer types. + + Mon Feb 2 15:33:58 1998 Michael P. Hayes + + * unroll.c (copy_loop_body): Use single_set instead of + PATTERN to detect increment of an iv inside a PARALLEL. + + Fri Jan 16 20:29:50 1998 Paul Eggert + + * toplev.c (): New include. + (get_run_time): Prefer CLK_TCK (if available) to HZ, and + prefer sysconf (_SC_CLK_TCK) (if available) to CLK_TCK. + * configure.in (sysconf): Call AC_CHECK_FUNCS. + + Wed Jan 14 20:10:51 1998 Paul Eggert + + * cccp.c: (rescan): Don't report line 0 as the possible real start + of an unterminated string constant. + Don't mishandle backslash-newlines that in are the output of + a macro expansion. Properly skip // style comments between a function + macro name and '(', as well as backslash-newlines in comments there. + (handle_directive): Handle / \ newline * between # and directive name. + In #include directives, \ does not escape ". + (do_include): For `#include "file', do not bother expanding into temp + buffer. When error encountered when expanding, do not try result. + (skip_if_group): When skipping an include directive, use include + tokenization, not normal tokenization. Backslash-newline is still + special when skipping. Handle * \ newline / correctly in comments + when skipping. + (skip_quoted_string): After \ newline, set *backslash_newlines_p + even if count_newlines is 0. + (macroexpand): Newline space is not a special marker inside a string. + (macroexpand, macarg): Do not generate \ddd for control characters + when stringifying; the C Standard does not allow this. + (macarg1): New arg MACRO. All callers changed. + Do not treat /*, //, or backslash-newline specially when processing + the output of a macro. + (discard_comments): Don't go past limit if looking for end of comment. + Discard backslash-newline properly when discarding comments. + (change_newlines): \" does not end a string. + (make_definition): Do not treat backslash-newline specially, as it + has already been removed before we get here. + + * profile.c (output_func_start_profiler): Don't fflush output + if -quiet. + * toplev.c (rest_of_compilation): Likewise. + + * i386/x-sco5 (CC): Remove trailing white space. + * x-convex (CCLIBFLAGS): Likewise. + * arm/t-semi (LIBGCC2_CFLAGS): Likewise. + Wed Jan 7 18:02:42 1998 Richard Kenner diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/ChangeLog.0 gcc-2.8.1/ChangeLog.0 *** gcc-2.8.0/ChangeLog.0 Mon Nov 20 02:05:28 1989 --- gcc-2.8.1/ChangeLog.0 Wed Feb 18 22:38:45 1998 *************** *** 1,3 **** - Wed Dec 21 02:46:34 1988 Richard Stallman (rms at sugar-bombs.ai.mit.edu) --- 1,2 ---- diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/ChangeLog.lib gcc-2.8.1/ChangeLog.lib *** gcc-2.8.0/ChangeLog.lib Wed Jan 7 17:41:32 1998 --- gcc-2.8.1/ChangeLog.lib Fri Feb 13 07:17:12 1998 *************** *** 1,2 **** --- 1,20 ---- + 1998-02-13 Richard Kenner + + * config.sub: Add PentiumII (i786). Add '7' to all i[3456] + entries. Add AMD and Cyrix names for P5 and P6. + + 1998-02-03 Philip Blundell + + * config.guess: Add support for Linux/ARM. + + 1998-02-03 Paul Eggert + + * obstack.h (PTR_INT_TYPE): Use __PTRDIFF_TYPE__ if available. + + 1998-01-28 Ian Lance Taylor + + * config.guess: Use ${UNAME_MACHINE} rather than i386 for cygwin32 + and mingw32. + Wed Jan 1 17:54:47 1998 J.J. van der Heijden diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/Makefile.in gcc-2.8.1/Makefile.in *** gcc-2.8.0/Makefile.in Mon Dec 29 06:56:08 1997 --- gcc-2.8.1/Makefile.in Mon Mar 2 20:54:31 1998 *************** *** 1,4 **** # Makefile for GNU C compiler. ! # Copyright (C) 1987, 88, 90-96, 1997 Free Software Foundation, Inc. #This file is part of GNU CC. --- 1,4 ---- # Makefile for GNU C compiler. ! # Copyright (C) 1987, 88, 90-97, 1998 Free Software Foundation, Inc. #This file is part of GNU CC. *************** *** 225,228 **** --- 225,230 ---- gxx_include_dir= @gxx_include_dir@ # Directory in which the old g++ header files may be found. + # The reason we use $(libdir)/g++-include rather than using libsubdir + # is for compatibility with older versions of libg++. old_gxx_include_dir= $(libdir)/g++-include # Directory to search for site-specific includes. *************** *** 350,353 **** --- 352,359 ---- FIXINCLUDES = @fixincludes@ + # Set to ChangeLog if we are in a CVS working directory. This lets + # us automatically build version.c. + VERSION_DEP = @version_dep@ + # Additional directories of header files to run fixincludes on. # These should be directories searched automatically by default *************** *** 586,597 **** insn-output.c insn-recog.c insn-emit.c insn-extract.c insn-peep.c \ insn-attr.h insn-attrtab.c insn-opinit.c \ ! stamp-flags stamp-config stamp-codes stamp-mlib \ ! stamp-output stamp-recog stamp-emit stamp-extract stamp-peep \ ! stamp-attr stamp-attrtab stamp-opinit stamp-proto stamp-crt stamp-crtS stamp-crt0 \ genemit$(exeext) genoutput$(exeext) genrecog$(exeext) genextract$(exeext) \ genflags$(exeext) gencodes$(exeext) genconfig$(exeext) genpeep$(exeext) \ genattrtab$(exeext) genattr$(exeext) genopinit$(exeext) \ $(BC_ALL) \ ! stamp-bcarity stamp-bcopcode stamp-bcopname \ bi-arity$(exeext) bi-opcode$(exeext) bi-opname$(exeext) \ xgcc$(exeext) cc1$(exeext) cpp$(exeext) $(EXTRA_PASSES) \ --- 592,603 ---- insn-output.c insn-recog.c insn-emit.c insn-extract.c insn-peep.c \ insn-attr.h insn-attrtab.c insn-opinit.c \ ! s-flags s-config s-codes s-mlib \ ! s-output s-recog s-emit s-extract s-peep \ ! s-attr s-attrtab s-opinit s-proto s-crt s-crtS s-crt0 \ genemit$(exeext) genoutput$(exeext) genrecog$(exeext) genextract$(exeext) \ genflags$(exeext) gencodes$(exeext) genconfig$(exeext) genpeep$(exeext) \ genattrtab$(exeext) genattr$(exeext) genopinit$(exeext) \ $(BC_ALL) \ ! s-bcarity s-bcopcode s-bcopname \ bi-arity$(exeext) bi-opcode$(exeext) bi-opname$(exeext) \ xgcc$(exeext) cc1$(exeext) cpp$(exeext) $(EXTRA_PASSES) \ *************** *** 668,671 **** --- 674,687 ---- .SUFFIXES: .in .def + $(srcdir)/version.c: $(VERSION_DEP) + cd $(srcdir); cvs log -h $? >tmp-ver + tag=`sed '1,/^sym/d;s/ *gcc-//;s/:.*$$//;q' tmp-ver`; \ + ver=`echo $${tag} | sed 's/-.*//' | sed 's/_/./g'`; \ + date=`echo $${tag} | sed 's/.*-//'`; \ + if [ $${date} != RELEASE ]; then ver="testgcc-$${ver} $${date} experimental"; fi; \ + echo "char *version_string = \"$${ver}\";" >>tmp-version.c + rm -f tmp-ver + $(srcdir)/move-if-change tmp-version.c $(srcdir)/version.c + Makefile: $(srcdir)/Makefile.in config.status $(srcdir)/version.c \ $(xmake_file) $(tmake_file) $(LANG_MAKEFILES) *************** *** 1037,1042 **** # driver program needs to select the library directory based on the # switches. ! multilib.h: stamp-mlib; @true ! stamp-mlib: $(srcdir)/genmultilib Makefile $(SHELL) $(srcdir)/genmultilib \ "$(MULTILIB_OPTIONS)" \ --- 1053,1058 ---- # driver program needs to select the library directory based on the # switches. ! multilib.h: s-mlib; @true ! s-mlib: $(srcdir)/genmultilib Makefile $(SHELL) $(srcdir)/genmultilib \ "$(MULTILIB_OPTIONS)" \ *************** *** 1046,1050 **** "$(MULTILIB_EXTRA_OPTS)" > tmp-mlib.h $(srcdir)/move-if-change tmp-mlib.h multilib.h ! touch stamp-mlib # Build multiple copies of libgcc.a, one for each target switch. --- 1062,1066 ---- "$(MULTILIB_EXTRA_OPTS)" > tmp-mlib.h $(srcdir)/move-if-change tmp-mlib.h multilib.h ! touch s-mlib # Build multiple copies of libgcc.a, one for each target switch. *************** *** 1133,1139 **** # On some systems we also want to install versions of these files # compiled using PIC for use in shared libraries. ! crtbeginS.o crtendS.o: stamp-crtS ; @true ! stamp-crtS: crtstuff.c $(GCC_PASSES) $(CONFIG_H) \ defaults.h frame.h gbl-ctors.h $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(CRTSTUFF_T_CFLAGS_S) \ --- 1149,1155 ---- # On some systems we also want to install versions of these files # compiled using PIC for use in shared libraries. ! crtbeginS.o crtendS.o: s-crtS ; @true ! s-crtS: crtstuff.c $(GCC_PASSES) $(CONFIG_H) \ defaults.h frame.h gbl-ctors.h $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) $(CRTSTUFF_T_CFLAGS_S) \ *************** *** 1144,1159 **** -DCRT_END -finhibit-size-directive -fno-inline-functions \ -g0 -c $(srcdir)/crtstuff.c -o crtendS$(objext) ! touch stamp-crtS # Compile the start modules crt0.o and mcrt0.o that are linked with every program ! crt0.o: stamp-crt0 ; @true ! mcrt0.o: stamp-crt0; @true ! stamp-crt0: $(CRT0_S) $(MCRT0_S) $(GCC_PASSES) $(CONFIG_H) $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(CRT0STUFF_T_CFLAGS) \ -o crt0.o -c $(CRT0_S) $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(CRT0STUFF_T_CFLAGS) \ -o mcrt0.o -c $(MCRT0_S) ! touch stamp-crt0 # # Compiling object files from source files. --- 1160,1175 ---- -DCRT_END -finhibit-size-directive -fno-inline-functions \ -g0 -c $(srcdir)/crtstuff.c -o crtendS$(objext) ! touch s-crtS # Compile the start modules crt0.o and mcrt0.o that are linked with every program ! crt0.o: s-crt0 ; @true ! mcrt0.o: s-crt0; @true ! s-crt0: $(CRT0_S) $(MCRT0_S) $(GCC_PASSES) $(CONFIG_H) $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(CRT0STUFF_T_CFLAGS) \ -o crt0.o -c $(CRT0_S) $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(CRT0STUFF_T_CFLAGS) \ -o mcrt0.o -c $(MCRT0_S) ! touch s-crt0 # # Compiling object files from source files. *************** *** 1213,1219 **** cplus-dem.o: cplus-dem.c $(DEMANGLE_H) ! underscore.c: stamp-under ; @true ! stamp-under: $(GCC_PASSES) echo "int xxy_us_dummy;" >tmp-dum.c $(GCC_FOR_TARGET) -S tmp-dum.c --- 1229,1235 ---- cplus-dem.o: cplus-dem.c $(DEMANGLE_H) ! underscore.c: s-under ; @true ! s-under: $(GCC_PASSES) echo "int xxy_us_dummy;" >tmp-dum.c $(GCC_FOR_TARGET) -S tmp-dum.c *************** *** 1226,1230 **** $(srcdir)/move-if-change tmp-under.c underscore.c -rm -f tmp-dum.c tmp-dum.s ! touch stamp-under # A file used by all variants of C. --- 1242,1246 ---- $(srcdir)/move-if-change tmp-under.c underscore.c -rm -f tmp-dum.c tmp-dum.s ! touch s-under # A file used by all variants of C. *************** *** 1263,1267 **** fold-const.o : fold-const.c $(CONFIG_H) $(TREE_H) flags.h toplev.o : toplev.c $(CONFIG_H) $(TREE_H) $(RTL_H) bytecode.h bc-emit.h \ ! flags.h input.h insn-attr.h xcoffout.h defaults.h output.h \ $(lang_options_files) $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(MAYBE_USE_COLLECT2) \ --- 1279,1284 ---- fold-const.o : fold-const.c $(CONFIG_H) $(TREE_H) flags.h toplev.o : toplev.c $(CONFIG_H) $(TREE_H) $(RTL_H) bytecode.h bc-emit.h \ ! flags.h input.h insn-attr.h insn-codes.h insn-config.h recog.h xcoffout.h \ ! defaults.h output.h \ $(lang_options_files) $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(MAYBE_USE_COLLECT2) \ *************** *** 1312,1316 **** function.h regs.h insn-config.h $(RECOG_H) real.h expr.h obstack.h \ bytecode.h bc-opcode.h bc-typecd.h bc-typecd.def bc-optab.h bc-emit.h \ ! bc-opname.h real.o : real.c $(CONFIG_H) $(TREE_H) getpwd.o : getpwd.c $(CONFIG_H) --- 1329,1333 ---- function.h regs.h insn-config.h $(RECOG_H) real.h expr.h obstack.h \ bytecode.h bc-opcode.h bc-typecd.h bc-typecd.def bc-optab.h bc-emit.h \ ! bc-opname.h hard-reg-set.h real.o : real.c $(CONFIG_H) $(TREE_H) getpwd.o : getpwd.c $(CONFIG_H) *************** *** 1408,1412 **** # This causes an anomaly in the results of make -n ! # because insn-* is older than stamp-* # and thus make -n thinks that insn-* will be updated # and force recompilation of things that depend on it. --- 1425,1429 ---- # This causes an anomaly in the results of make -n ! # because insn-* is older than s-* # and thus make -n thinks that insn-* will be updated # and force recompilation of things that depend on it. *************** *** 1420,1440 **** # trailing `;'), we call true for each. ! insn-config.h: stamp-config ; @true ! stamp-config : $(md_file) genconfig $(srcdir)/move-if-change ./genconfig $(md_file) > tmp-config.h $(srcdir)/move-if-change tmp-config.h insn-config.h ! touch stamp-config ! insn-flags.h: stamp-flags ; @true ! stamp-flags : $(md_file) genflags $(srcdir)/move-if-change ./genflags $(md_file) > tmp-flags.h $(srcdir)/move-if-change tmp-flags.h insn-flags.h ! touch stamp-flags ! insn-codes.h: stamp-codes ; @true ! stamp-codes : $(md_file) gencodes $(srcdir)/move-if-change ./gencodes $(md_file) > tmp-codes.h $(srcdir)/move-if-change tmp-codes.h insn-codes.h ! touch stamp-codes insn-emit.o : insn-emit.c $(CONFIG_H) $(RTL_H) expr.h real.h output.h \ --- 1437,1457 ---- # trailing `;'), we call true for each. ! insn-config.h: s-config ; @true ! s-config : $(md_file) genconfig $(srcdir)/move-if-change ./genconfig $(md_file) > tmp-config.h $(srcdir)/move-if-change tmp-config.h insn-config.h ! touch s-config ! insn-flags.h: s-flags ; @true ! s-flags : $(md_file) genflags $(srcdir)/move-if-change ./genflags $(md_file) > tmp-flags.h $(srcdir)/move-if-change tmp-flags.h insn-flags.h ! touch s-flags ! insn-codes.h: s-codes ; @true ! s-codes : $(md_file) gencodes $(srcdir)/move-if-change ./gencodes $(md_file) > tmp-codes.h $(srcdir)/move-if-change tmp-codes.h insn-codes.h ! touch s-codes insn-emit.o : insn-emit.c $(CONFIG_H) $(RTL_H) expr.h real.h output.h \ *************** *** 1442,1450 **** $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-emit.c ! insn-emit.c: stamp-emit ; @true ! stamp-emit : $(md_file) genemit $(srcdir)/move-if-change ./genemit $(md_file) > tmp-emit.c $(srcdir)/move-if-change tmp-emit.c insn-emit.c ! touch stamp-emit insn-recog.o : insn-recog.c $(CONFIG_H) $(RTL_H) insn-config.h $(RECOG_H) \ --- 1459,1467 ---- $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-emit.c ! insn-emit.c: s-emit ; @true ! s-emit : $(md_file) genemit $(srcdir)/move-if-change ./genemit $(md_file) > tmp-emit.c $(srcdir)/move-if-change tmp-emit.c insn-emit.c ! touch s-emit insn-recog.o : insn-recog.c $(CONFIG_H) $(RTL_H) insn-config.h $(RECOG_H) \ *************** *** 1452,1460 **** $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-recog.c ! insn-recog.c: stamp-recog ; @true ! stamp-recog : $(md_file) genrecog $(srcdir)/move-if-change ./genrecog $(md_file) > tmp-recog.c $(srcdir)/move-if-change tmp-recog.c insn-recog.c ! touch stamp-recog insn-opinit.o : insn-opinit.c $(CONFIG_H) $(RTL_H) insn-codes.h insn-flags.h \ --- 1469,1477 ---- $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-recog.c ! insn-recog.c: s-recog ; @true ! s-recog : $(md_file) genrecog $(srcdir)/move-if-change ./genrecog $(md_file) > tmp-recog.c $(srcdir)/move-if-change tmp-recog.c insn-recog.c ! touch s-recog insn-opinit.o : insn-opinit.c $(CONFIG_H) $(RTL_H) insn-codes.h insn-flags.h \ *************** *** 1462,1488 **** $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-opinit.c ! insn-opinit.c: stamp-opinit ; @true ! stamp-opinit : $(md_file) genopinit $(srcdir)/move-if-change ./genopinit $(md_file) > tmp-opinit.c $(srcdir)/move-if-change tmp-opinit.c insn-opinit.c ! touch stamp-opinit insn-extract.o : insn-extract.c $(CONFIG_H) $(RTL_H) $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-extract.c ! insn-extract.c: stamp-extract ; @true ! stamp-extract : $(md_file) genextract $(srcdir)/move-if-change ./genextract $(md_file) > tmp-extract.c $(srcdir)/move-if-change tmp-extract.c insn-extract.c ! touch stamp-extract insn-peep.o : insn-peep.c $(CONFIG_H) $(RTL_H) regs.h output.h real.h $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-peep.c ! insn-peep.c: stamp-peep ; @true ! stamp-peep : $(md_file) genpeep $(srcdir)/move-if-change ./genpeep $(md_file) > tmp-peep.c $(srcdir)/move-if-change tmp-peep.c insn-peep.c ! touch stamp-peep insn-attrtab.o : insn-attrtab.c $(CONFIG_H) $(RTL_H) regs.h real.h output.h \ --- 1479,1505 ---- $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-opinit.c ! insn-opinit.c: s-opinit ; @true ! s-opinit : $(md_file) genopinit $(srcdir)/move-if-change ./genopinit $(md_file) > tmp-opinit.c $(srcdir)/move-if-change tmp-opinit.c insn-opinit.c ! touch s-opinit insn-extract.o : insn-extract.c $(CONFIG_H) $(RTL_H) $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-extract.c ! insn-extract.c: s-extract ; @true ! s-extract : $(md_file) genextract $(srcdir)/move-if-change ./genextract $(md_file) > tmp-extract.c $(srcdir)/move-if-change tmp-extract.c insn-extract.c ! touch s-extract insn-peep.o : insn-peep.c $(CONFIG_H) $(RTL_H) regs.h output.h real.h $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-peep.c ! insn-peep.c: s-peep ; @true ! s-peep : $(md_file) genpeep $(srcdir)/move-if-change ./genpeep $(md_file) > tmp-peep.c $(srcdir)/move-if-change tmp-peep.c insn-peep.c ! touch s-peep insn-attrtab.o : insn-attrtab.c $(CONFIG_H) $(RTL_H) regs.h real.h output.h \ *************** *** 1490,1501 **** $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-attrtab.c ! insn-attr.h: stamp-attr ; @true ! stamp-attr : $(md_file) genattr $(srcdir)/move-if-change ./genattr $(md_file) > tmp-attr.h $(srcdir)/move-if-change tmp-attr.h insn-attr.h ! touch stamp-attr ! insn-attrtab.c: stamp-attrtab ; @true ! stamp-attrtab : $(md_file) genattrtab $(srcdir)/move-if-change if cmp -s $(PREMADE_ATTRTAB_MD) $(md_file); \ then \ --- 1507,1518 ---- $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-attrtab.c ! insn-attr.h: s-attr ; @true ! s-attr : $(md_file) genattr $(srcdir)/move-if-change ./genattr $(md_file) > tmp-attr.h $(srcdir)/move-if-change tmp-attr.h insn-attr.h ! touch s-attr ! insn-attrtab.c: s-attrtab ; @true ! s-attrtab : $(md_file) genattrtab $(srcdir)/move-if-change if cmp -s $(PREMADE_ATTRTAB_MD) $(md_file); \ then \ *************** *** 1506,1510 **** fi $(srcdir)/move-if-change tmp-attrtab.c insn-attrtab.c ! touch stamp-attrtab insn-output.o : insn-output.c $(CONFIG_H) $(RTL_H) regs.h real.h conditions.h \ --- 1523,1527 ---- fi $(srcdir)/move-if-change tmp-attrtab.c insn-attrtab.c ! touch s-attrtab insn-output.o : insn-output.c $(CONFIG_H) $(RTL_H) regs.h real.h conditions.h \ *************** *** 1513,1521 **** $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-output.c ! insn-output.c: stamp-output ; @true ! stamp-output : $(md_file) genoutput $(srcdir)/move-if-change ./genoutput $(md_file) > tmp-output.c $(srcdir)/move-if-change tmp-output.c insn-output.c ! touch stamp-output # # Compile the programs that generate insn-* from the machine description. --- 1530,1538 ---- $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -c insn-output.c ! insn-output.c: s-output ; @true ! s-output : $(md_file) genoutput $(srcdir)/move-if-change ./genoutput $(md_file) > tmp-output.c $(srcdir)/move-if-change tmp-output.c insn-output.c ! touch s-output # # Compile the programs that generate insn-* from the machine description. *************** *** 1692,1712 **** $(srcdir)/bi-reverse.c ! bc-arity.h: stamp-bcarity ; @true ! stamp-bcarity : $(srcdir)/bytecode.def bi-arity $(srcdir)/move-if-change ./bi-arity < $(srcdir)/bytecode.def >tmp-bc-arity.h $(srcdir)/move-if-change tmp-bc-arity.h bc-arity.h ! touch stamp-bcarity ! bc-opcode.h: stamp-bcopcode ; @true ! stamp-bcopcode : $(srcdir)/bytecode.def bi-opcode $(srcdir)/move-if-change ./bi-opcode < $(srcdir)/bytecode.def >tmp-bcopcd.h $(srcdir)/move-if-change tmp-bcopcd.h bc-opcode.h ! touch stamp-bcopcode ! bc-opname.h: stamp-bcopname ; @true ! stamp-bcopname : $(srcdir)/bytecode.def bi-opname $(srcdir)/move-if-change ./bi-opname < $(srcdir)/bytecode.def >tmp-bcopnm.h $(srcdir)/move-if-change tmp-bcopnm.h bc-opname.h ! touch stamp-bcopname bytecode.mostlyclean: --- 1709,1729 ---- $(srcdir)/bi-reverse.c ! bc-arity.h: s-bcarity ; @true ! s-bcarity : $(srcdir)/bytecode.def bi-arity $(srcdir)/move-if-change ./bi-arity < $(srcdir)/bytecode.def >tmp-bc-arity.h $(srcdir)/move-if-change tmp-bc-arity.h bc-arity.h ! touch s-bcarity ! bc-opcode.h: s-bcopcode ; @true ! s-bcopcode : $(srcdir)/bytecode.def bi-opcode $(srcdir)/move-if-change ./bi-opcode < $(srcdir)/bytecode.def >tmp-bcopcd.h $(srcdir)/move-if-change tmp-bcopcd.h bc-opcode.h ! touch s-bcopcode ! bc-opname.h: s-bcopname ; @true ! s-bcopname : $(srcdir)/bytecode.def bi-opname $(srcdir)/move-if-change ./bi-opname < $(srcdir)/bytecode.def >tmp-bcopnm.h $(srcdir)/move-if-change tmp-bcopnm.h bc-opname.h ! touch s-bcopname bytecode.mostlyclean: *************** *** 1736,1741 **** cccp.o: cccp.c $(CONFIG_H) pcp.h version.c config.status - # The reason we use $(libdir)/g++-include rather than using libsubdir - # is for compatibility with the current version of libg++. $(CC) $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ -DGCC_INCLUDE_DIR=\"$(libsubdir)/include\" \ --- 1753,1756 ---- *************** *** 1782,1786 **** protoize.o getopt.o getopt1.o getpwd.o version.o \ pexecute.o choose-temp.o $(LIBS) ! protoize.o: stamp-proto ; @true unprotoize: unprotoize.o getopt.o getopt1.o getpwd.o version.o \ --- 1797,1801 ---- protoize.o getopt.o getopt1.o getpwd.o version.o \ pexecute.o choose-temp.o $(LIBS) ! protoize.o: s-proto ; @true unprotoize: unprotoize.o getopt.o getopt1.o getpwd.o version.o \ *************** *** 1789,1795 **** unprotoize.o getopt.o getopt1.o getpwd.o version.o \ pexecute.o choose-temp.o $(LIBS) ! unprotoize.o: stamp-proto ; @true ! stamp-proto: protoize.c getopt.h $(CONFIG_H) $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ -DGCC_INCLUDE_DIR=\"$(libsubdir)/include\" \ --- 1804,1810 ---- unprotoize.o getopt.o getopt1.o getpwd.o version.o \ pexecute.o choose-temp.o $(LIBS) ! unprotoize.o: s-proto ; @true ! s-proto: protoize.c getopt.h $(CONFIG_H) $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ -DGCC_INCLUDE_DIR=\"$(libsubdir)/include\" \ *************** *** 1809,1813 **** -DSTD_PROTO_DIR=\"$(libsubdir)\" \ $(srcdir)/protoize.c ! touch stamp-proto getopt.o: getopt.c getopt.h --- 1824,1828 ---- -DSTD_PROTO_DIR=\"$(libsubdir)\" \ $(srcdir)/protoize.c ! touch s-proto getopt.o: getopt.c getopt.h *************** *** 1857,1861 **** # # Build the include directory. The stamp files are stmp-* rather than ! # stamp-* so that mostlyclean does not force the include directory to # be rebuilt. --- 1872,1876 ---- # # Build the include directory. The stamp files are stmp-* rather than ! # s-* so that mostlyclean does not force the include directory to # be rebuilt. *************** *** 2033,2044 **** -rm -f tmplibgcc* tmpcopy xlimits.h libgcc1-test for name in $(LIB1FUNCS); do rm -f $${name}.c; done ! # Delete other temporary files. ! -rm -f tmp-float.h tmp-gcc.xtar.gz ! -rm -f tmp-foo1 tmp-foo2 tmp-proto.* tmp-unproto.1 tmp-SYSCALLS.s ! -rm -f tmp-c-parse.y tmp-gperf.h ! -rm -f tmp-specs t-float.h-cross tmp-xlimits.h ! -rm -f tmp-fixtmp.c xsys-protos.hT ! # Delete the stamp files. ! -rm -f stamp-* tmp-* -rm -f */stamp-* */tmp-* # Delete debugging dump files. --- 2048,2055 ---- -rm -f tmplibgcc* tmpcopy xlimits.h libgcc1-test for name in $(LIB1FUNCS); do rm -f $${name}.c; done ! # Delete other built files. ! -rm -f t-float.h-cross xsys-protos.hT fp-bit.c dp-bit.c ! # Delete the stamp and temporary files. ! -rm -f s-* tmp-* stamp-* stmp-* -rm -f */stamp-* */tmp-* # Delete debugging dump files. *************** *** 2078,2083 **** fi # Delete the include directory. ! -rm -rf stmp-* include ! -rm -f */stmp-* # Delete files used by the "multilib" facility (including libgcc subdirs). -rm -f multilib.h tmpmultilib* --- 2089,2093 ---- fi # Delete the include directory. ! -rm -rf include # Delete files used by the "multilib" facility (including libgcc subdirs). -rm -f multilib.h tmpmultilib* *************** *** 2388,2417 **** TAGS: force cd $(srcdir); \ ! mkdir temp; \ ! mv -f c-parse.[ch] cexp.c =*.[chy] temp; \ etags *.y *.h *.c; \ ! mv temp/* .; \ ! rmdir temp ! ! # Create the distribution tar file. ! #dist: gcc-$(version).tar.gz ! dist: gcc.xtar.gz ! ! gcc.xtar.gz: gcc.xtar ! gzip --best < gcc.xtar > tmp-gcc.xtar.gz ! mv tmp-gcc.xtar.gz gcc.xtar.gz ! #gcc-$(version).tar.gz: gcc-$(version).tar ! # gzip < gcc-$(version).tar > gcc-$(version).tar.gz ! #gcc-$(version).tar: ! gcc.xtar: distdir # Make the distribution. ! tar -chf gcc.xtar gcc-$(version) # This target exists to do the initial work before the language specific # stuff gets done. distdir-start: doc $(srcdir)/INSTALL $(srcdir)/c-parse.y $(srcdir)/c-gperf.h \ ! $(srcdir)/c-parse.c $(srcdir)/cexp.c $(srcdir)/config.in @if grep -s "for version ${mainversion}" gcc.texi > /dev/null; \ then true; \ --- 2398,2424 ---- TAGS: force cd $(srcdir); \ ! mkdir tmp-tags; \ ! mv -f c-parse.[ch] cexp.c =*.[chy] tmp-tags; \ etags *.y *.h *.c; \ ! mv tmp-tags/* .; \ ! rmdir tmp-tags ! # Create the distribution tar.gz file. ! dist: tmp-gcc.xtar ! gzip --best < tmp-gcc.xtar > tmp-gcc.xtar.gz ! mv tmp-gcc.xtar.gz gcc-$(version).tar.gz ! tmp-gcc.xtar: distdir # Make the distribution. ! tar -chf tmp-gcc.xtar gcc-$(version) ! ! distdir-cvs: force ! if [ -d $(srcdir)/CVS ]; then cvs -r update; fi # This target exists to do the initial work before the language specific # stuff gets done. distdir-start: doc $(srcdir)/INSTALL $(srcdir)/c-parse.y $(srcdir)/c-gperf.h \ ! $(srcdir)/c-parse.c $(srcdir)/cexp.c $(srcdir)/config.in \ ! $(srcdir)/bi-parser.h $(srcdir)/bi-parser.c $(srcdir)/version.c TAGS @if grep -s "for version ${mainversion}" gcc.texi > /dev/null; \ then true; \ *************** *** 2435,2439 **** cd config; \ for file in *[0-9a-zA-Z+]; do \ ! if test -d $$file && test "$$file" != RCS; then \ mkdir ../tmp/config/$$file; \ cd $$file; \ --- 2442,2446 ---- cd config; \ for file in *[0-9a-zA-Z+]; do \ ! if test -d $$file && test "$$file" != RCS && test "$$file" != CVS; then \ mkdir ../tmp/config/$$file; \ cd $$file; \ *************** *** 2461,2467 **** # this to use Makefile.in, but it doesn't have the `lang.foo' targets # expanded. ! cd gcc-$(version); make extraclean ! distdir: distdir-start lang.distdir distdir-finish # make diff oldversion=M.N --- 2468,2474 ---- # this to use Makefile.in, but it doesn't have the `lang.foo' targets # expanded. ! cd gcc-$(version); make extraclean VERSION_DEP= ! distdir: distdir-cvs distdir-start lang.distdir distdir-finish # make diff oldversion=M.N *************** *** 2470,2479 **** diff: diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h \ ! -x cexp.c -x bi-parser.c -x objc-parse.y -x objc-parse.c \ ! -x bi-parser.h -x TAGS \ -x "gcc.??" -x "gcc.??s" -x gcc.aux -x "gcc.info*" \ -x "cpp.??" -x "cpp.??s" -x cpp.aux -x "cpp.info*" \ $(LANG_DIFF_EXCLUDES) \ ! gcc-$(oldversion) gcc-$(version) > diffs bootstrap: force --- 2477,2486 ---- diff: diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h \ ! -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL \ ! -x configure -x config.in \ -x "gcc.??" -x "gcc.??s" -x gcc.aux -x "gcc.info*" \ -x "cpp.??" -x "cpp.??s" -x cpp.aux -x "cpp.info*" \ $(LANG_DIFF_EXCLUDES) \ ! gcc-$(oldversion) gcc-$(version) > gcc-$(oldversion)-$(version).diff bootstrap: force diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/NEWS gcc-2.8.1/NEWS *** gcc-2.8.0/NEWS Thu Jan 8 05:55:08 1998 --- gcc-2.8.1/NEWS Tue Feb 17 13:46:53 1998 *************** *** 1,2 **** --- 1,8 ---- + Noteworthy changes in GCC version 2.8.1 + --------------------------------------- + + Numerous bugs have been fixed and some minor performance + improvements (compilation speed) have been made. + Noteworthy changes in GCC version 2.8.0 --------------------------------------- diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/README gcc-2.8.1/README *** gcc-2.8.0/README Thu Jan 8 17:30:00 1998 --- gcc-2.8.1/README Tue Mar 3 21:33:16 1998 *************** *** 1,3 **** ! This directory contains the version 2.8.0 release of the GNU C compiler. It includes all of the support for compiling C++ and Objective C, including a run-time library for Objective C. --- 1,3 ---- ! This directory contains the version 2.8.1 release of the GNU C compiler. It includes all of the support for compiling C++ and Objective C, including a run-time library for Objective C. diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/README.RS6000 gcc-2.8.1/README.RS6000 *** gcc-2.8.0/README.RS6000 Sat Nov 4 10:28:12 1995 --- gcc-2.8.1/README.RS6000 Wed Feb 18 15:13:50 1998 *************** *** 1,50 **** ! AIX 3.1 and 3.2 assembler problems ! Specifying the -g flag to GCC on the RS/6000 requires upgrading the ! standard AIX assembler distributed with AIX 3.1 and versions of AIX ! 3.2 earlier than 3.2.4 with a replacement that is available from IBM. ! Note that Makefile.in specifies the -g when compiling libgcc2.c. - You can test for the presence of a fixed assembler by entering the following: - % as -u < /dev/null - If the command exits normally, the assembler fix already is installed. - If the assembler complains that "-u" is an unknown flag, you need to order - the fix. ! If you are running AIX 3.1 (lslpp -h bos.obj output reports ! 03.01.0005.XXXX where the 0005 can be any higher number and the XXXX ! can be any value), call IBM Support at 800-237-5511 and ask for ! shipment of AIX/6000 fix PTF U403044 for APAR IX22829 (.extern foo ! conflicts with defining foo). ! ! If you are running AIX 3.2 but not 3.2.4 or later (lslpp -h bos.obj ! output reports 03.02.0000.0000), a newer update to the assembler fix ! is available. Ask for shipment of AIX/6000 fix PTF U416277 for ! IX32992 (.global prevents detection of duplicate symbol). ! ! If you are running AIX 3.2.4 or later, you already have the new ! assembler. ! Any customer can order and get the replacement assembler, and install it on ! one or more machines. It is available on diskette from IBM Customer Support ! and from the IBM Internet fix anonymous ftp server (FixDist) at ! aix.boulder.ibm.com (198.17.57.66). ! ! If you contact IBM Customer Support, they may also ask you for your customer ! number. If you do not know it, you will still be able to get the fix, but ! you will have to be persistent. IBM has corresponding support organizations ! outside of North America. Call your IBM branch office and ask them to put ! you in touch with the department that handles fixes for AIX/6000. If that ! doesn't work, ask for the department that handles software defect support ! for AIX/6000 and ask for the APAR fix. ! ! If you use the GNU assembler instead of the system supplied assembler, you need ! an assembler modified after October 16th, 1995 in order to build the GNU C ! compiler. This is because the GNU C compiler wants to build a variant of its ! library, libgcc.a with the -mcpu=common switch to support building programs ! that can run on either the Power or PowerPC machines. ! AIX NLS problems AIX on the RS/6000 provides support (NLS) for environments outside of --- 1,24 ---- ! AIX 4.3 assembler ! The AIX 4.3.0.0 assembler generates incorrect object files if the ".bs" ! pseudo-op references symbols in certain sections. If GCC is invoked with ! the -g debugging option (including during bootstrapping), incorrect object ! files will be produced and the AIX linker will fail with a severe error. ! A fix for APAR IX74254 (64BIT DISASSEMBLED OUPUT FROM COMPILER FAILS TO ! ASSEMBLE/BIND) is available from IBM Customer Support and IBM's ! service.boulder.ibm.com website. ! AIX 4.1 binder ! Due to changes in the way that GCC invokes the binder (linker) for AIX 4.1, ! the link step now may produce warnings of duplicate symbols which were not ! reported before. The assembly files generated by GCC for AIX always have ! included multiple symbol definitions for certain global variable and ! function declarations in the original program. The warnings should not ! prevent the linker from producing a correct library or runnable executable. ! AIX NLS problems AIX on the RS/6000 provides support (NLS) for environments outside of *************** *** 57,61 **** "En_US". ! AIX 3.2.5 XLC-1.3 problems --- 31,35 ---- "En_US". ! AIX 3.2.5 XLC-1.3 problems *************** *** 73,77 **** ! AIX 3.2 common-mode support AIX common-mode providing transparent support of both the POWER and PowerPC --- 47,51 ---- ! AIX 3.2 common-mode support AIX common-mode providing transparent support of both the POWER and PowerPC *************** *** 102,111 **** ! AIX 4.1 binder ! Due to changes in the way that GCC invokes the binder (linker) for AIX 4.1, ! the link step now may produce warnings of duplicate symbols which were not ! reported before. The assembly files generated by GCC for AIX always have ! included multiple symbol definitions for certain global variable and ! function declarations in the original program. The warnings should not ! prevent the linker from producing a correct library or runnable executable. --- 76,122 ---- ! AIX 3.1 and 3.2 assembler problems ! ! Specifying the -g flag to GCC on the RS/6000 requires upgrading the ! standard AIX assembler distributed with AIX 3.1 and versions of AIX ! 3.2 earlier than 3.2.4 with a replacement that is available from IBM. ! Note that Makefile.in specifies the -g when compiling libgcc2.c. ! You can test for the presence of a fixed assembler by entering the following: ! % as -u < /dev/null ! If the command exits normally, the assembler fix already is installed. ! If the assembler complains that "-u" is an unknown flag, you need to order ! the fix. ! ! If you are running AIX 3.1 (lslpp -h bos.obj output reports ! 03.01.0005.XXXX where the 0005 can be any higher number and the XXXX ! can be any value), call IBM Support at 800-237-5511 and ask for ! shipment of AIX/6000 fix PTF U403044 for APAR IX22829 (.extern foo ! conflicts with defining foo). ! ! If you are running AIX 3.2 but not 3.2.4 or later (lslpp -h bos.obj ! output reports 03.02.0000.0000), a newer update to the assembler fix ! is available. Ask for shipment of AIX/6000 fix PTF U416277 for ! IX32992 (.global prevents detection of duplicate symbol). ! ! If you are running AIX 3.2.4 or later, you already have the new ! assembler. ! ! Any customer can order and get the replacement assembler, and install it on ! one or more machines. It is available on diskette from IBM Customer Support ! and from the IBM Internet fix anonymous ftp server (FixDist) at ! aix.boulder.ibm.com (198.17.57.66). ! ! If you contact IBM Customer Support, they may also ask you for your customer ! number. If you do not know it, you will still be able to get the fix, but ! you will have to be persistent. IBM has corresponding support organizations ! outside of North America. Call your IBM branch office and ask them to put ! you in touch with the department that handles fixes for AIX/6000. If that ! doesn't work, ask for the department that handles software defect support ! for AIX/6000 and ask for the APAR fix. ! ! If you use the GNU assembler instead of the system supplied assembler, you need ! an assembler modified after October 16th, 1995 in order to build the GNU C ! compiler. This is because the GNU C compiler wants to build a variant of its ! library, libgcc.a with the -mcpu=common switch to support building programs ! that can run on either the Power or PowerPC machines. diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/SERVICE gcc-2.8.1/SERVICE *** gcc-2.8.0/SERVICE Fri Dec 12 18:43:52 1997 --- gcc-2.8.1/SERVICE Fri Feb 13 17:22:48 1998 *************** *** 36,40 **** For a current copy of this directory, or to have yourself listed, ask: ! gnu@prep.ai.mit.edu ** Please keep the entries in this file alphabetical ** --- 36,40 ---- For a current copy of this directory, or to have yourself listed, ask: ! gnu@gnu.org ** Please keep the entries in this file alphabetical ** *************** *** 747,751 **** +61 411250024 ! * The human face behind the bug-g++@prep.ai.mit.edu mailing list - known in the past as and - now known as . --- 747,751 ---- +61 411250024 ! * The human face behind the bug-g++@gnu.org mailing list - known in the past as and - now known as . *************** *** 899,902 **** --- 899,928 ---- Updated: 1997-05-07  + Mark P. Mitchell + 3421 El Camino Real #35 + Atherton, CA 94027 + (650) 364-5360 + http://home.earthlink.net/~mbmitchell/consulting.html + + Experience + ---------- + I am an experienced software engineer, with particular expertise in + the field of programming tools. I am responsible for the + implementation of member templates in currently available versions of + G++ as well as many other G++ bug-fixes, and continue to work actively on + improving G++. + + I am willing to work on any and all projects involving free software. + + Please see my resume at the above URL for further information on + my experience and qualifications. + + Rates + ----- + My standard rate is $125/hr, but I am willing to negotiate flat fees, and + discounts for deserving organizations. + + Updated: 1998-02-13 + Erik Naggum P.O. Box 1570 Vika http://www.naggum.no *************** *** 1292,1296 **** Updated: 1997-05-19  ! Leonard H. Tower Jr. 36 Porter Street Somerville, MA 02143 --- 1318,1322 ---- Updated: 1997-05-19  ! Leonard H. Tower Jr. 36 Porter Street Somerville, MA 02143 *************** *** 1301,1305 **** Installation, handholding, trouble shooting, extensions, teaching. ! Rates: $ 150.00/hour + travel expenses. Negotiable for non-profits. Experience: Have hacked on over a dozen architectures in many languages. Have --- 1327,1332 ---- Installation, handholding, trouble shooting, extensions, teaching. ! Rates: $ 150.00/hour + travel expenses. Fixed fee quotes available. ! Negotiable for non-profits. Experience: Have hacked on over a dozen architectures in many languages. Have *************** *** 1307,1311 **** of gcc and its back-end support. Resume available on request. ! Updated: 1997-05-24  noris network GmbH --- 1334,1338 ---- of gcc and its back-end support. Resume available on request. ! Updated: 1998-02-10  noris network GmbH *************** *** 1416,1420 **** For a current copy of this directory, or to have yourself listed, ask: ! gnu@prep.ai.mit.edu ** Please keep the entries in this file alphabetical ** --- 1443,1447 ---- For a current copy of this directory, or to have yourself listed, ask: ! gnu@gnu.org ** Please keep the entries in this file alphabetical ** diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/acconfig.h gcc-2.8.1/acconfig.h *** gcc-2.8.0/acconfig.h Thu Dec 11 18:00:23 1997 --- gcc-2.8.1/acconfig.h Tue Feb 3 15:52:21 1998 *************** *** 22,24 **** --- 22,27 ---- /* Whether getenv must be declared even if is included. */ #undef NEED_DECLARATION_GETENV + + /* Whether sbrk must be declared even if is included. */ + #undef NEED_DECLARATION_SBRK @TOP@ diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/c-common.c gcc-2.8.1/c-common.c *** gcc-2.8.0/c-common.c Wed Nov 19 15:15:38 1997 --- gcc-2.8.1/c-common.c Wed Feb 18 22:16:13 1998 *************** *** 1,4 **** /* Subroutines shared by all languages that are variants of C. ! Copyright (C) 1992, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* Subroutines shared by all languages that are variants of C. ! Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 919,922 **** --- 919,925 ---- If NULL, then this modifier is not allowed. */ tree *bigllen; + /* Type of argument if length modifier `Z' is used. + If NULL, then this modifier is not allowed. */ + tree *zlen; /* List of other modifier characters allowed with these options. */ char *flag_chars; *************** *** 924,953 **** static format_char_info print_char_table[] = { ! { "di", 0, T_I, T_I, T_L, T_LL, T_LL, "-wp0 +" }, ! { "oxX", 0, T_UI, T_UI, T_UL, T_ULL, T_ULL, "-wp0#" }, ! { "u", 0, T_UI, T_UI, T_UL, T_ULL, T_ULL, "-wp0" }, ! /* Two GNU extensions. */ ! { "Z", 0, T_ST, NULL, NULL, NULL, NULL, "-wp0" }, ! { "m", 0, T_V, NULL, NULL, NULL, NULL, "-wp" }, ! { "feEgGaA", 0, T_D, NULL, NULL, NULL, T_LD, "-wp0 +#" }, ! { "c", 0, T_I, NULL, T_W, NULL, NULL, "-w" }, ! { "C", 0, T_W, NULL, NULL, NULL, NULL, "-w" }, ! { "s", 1, T_C, NULL, T_W, NULL, NULL, "-wp" }, ! { "S", 1, T_W, NULL, NULL, NULL, NULL, "-wp" }, ! { "p", 1, T_V, NULL, NULL, NULL, NULL, "-w" }, ! { "n", 1, T_I, T_S, T_L, T_LL, NULL, "" }, { NULL } }; static format_char_info scan_char_table[] = { ! { "di", 1, T_I, T_S, T_L, T_LL, T_LL, "*" }, ! { "ouxX", 1, T_UI, T_US, T_UL, T_ULL, T_ULL, "*" }, ! { "efgEGaA", 1, T_F, NULL, T_D, NULL, T_LD, "*" }, ! { "sc", 1, T_C, NULL, T_W, NULL, NULL, "*a" }, ! { "[", 1, T_C, NULL, NULL, NULL, NULL, "*a" }, ! { "C", 1, T_W, NULL, NULL, NULL, NULL, "*" }, ! { "S", 1, T_W, NULL, NULL, NULL, NULL, "*" }, ! { "p", 2, T_V, NULL, NULL, NULL, NULL, "*" }, ! { "n", 1, T_I, T_S, T_L, T_LL, NULL, "" }, { NULL } }; --- 927,955 ---- static format_char_info print_char_table[] = { ! { "di", 0, T_I, T_I, T_L, T_LL, T_LL, T_ST, "-wp0 +" }, ! { "oxX", 0, T_UI, T_UI, T_UL, T_ULL, T_ULL, T_ST, "-wp0#" }, ! { "u", 0, T_UI, T_UI, T_UL, T_ULL, T_ULL, T_ST, "-wp0" }, ! /* A GNU extension. */ ! { "m", 0, T_V, NULL, NULL, NULL, NULL, NULL, "-wp" }, ! { "feEgGaA", 0, T_D, NULL, NULL, NULL, T_LD, NULL, "-wp0 +#" }, ! { "c", 0, T_I, NULL, T_W, NULL, NULL, NULL, "-w" }, ! { "C", 0, T_W, NULL, NULL, NULL, NULL, NULL, "-w" }, ! { "s", 1, T_C, NULL, T_W, NULL, NULL, NULL, "-wp" }, ! { "S", 1, T_W, NULL, NULL, NULL, NULL, NULL, "-wp" }, ! { "p", 1, T_V, NULL, NULL, NULL, NULL, NULL, "-w" }, ! { "n", 1, T_I, T_S, T_L, T_LL, NULL, NULL, "" }, { NULL } }; static format_char_info scan_char_table[] = { ! { "di", 1, T_I, T_S, T_L, T_LL, T_LL, NULL, "*" }, ! { "ouxX", 1, T_UI, T_US, T_UL, T_ULL, T_ULL, NULL, "*" }, ! { "efgEGaA", 1, T_F, NULL, T_D, NULL, T_LD, NULL, "*" }, ! { "sc", 1, T_C, NULL, T_W, NULL, NULL, NULL, "*a" }, ! { "[", 1, T_C, NULL, NULL, NULL, NULL, NULL, "*a" }, ! { "C", 1, T_W, NULL, NULL, NULL, NULL, NULL, "*" }, ! { "S", 1, T_W, NULL, NULL, NULL, NULL, NULL, "*" }, ! { "p", 2, T_V, NULL, NULL, NULL, NULL, NULL, "*" }, ! { "n", 1, T_I, T_S, T_L, T_LL, NULL, NULL, "" }, { NULL } }; *************** *** 1288,1292 **** { sprintf (message, "repeated `%c' flag in format", ! *format_chars); warning (message); } --- 1290,1294 ---- { sprintf (message, "repeated `%c' flag in format", ! *format_chars++); warning (message); } *************** *** 1396,1399 **** --- 1398,1407 ---- length_char); } + else if (*format_chars == 'Z') + { + length_char = *format_chars++; + if (pedantic) + pedwarn ("ANSI C does not support the `Z' length modifier"); + } else length_char = 0; *************** *** 1518,1521 **** --- 1526,1530 ---- case 'q': wanted_type = fci->qlen ? *(fci->qlen) : 0; break; case 'L': wanted_type = fci->bigllen ? *(fci->bigllen) : 0; break; + case 'Z': wanted_type = fci->zlen ? *fci->zlen : 0; break; } if (wanted_type == 0) diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/c-decl.c gcc-2.8.1/c-decl.c *** gcc-2.8.0/c-decl.c Wed Dec 3 08:08:54 1997 --- gcc-2.8.1/c-decl.c Mon Feb 9 20:49:09 1998 *************** *** 1,4 **** /* Process declarations and variables for C compiler. ! Copyright (C) 1988, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* Process declarations and variables for C compiler. ! Copyright (C) 1988, 92-97, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 1969,1979 **** if (different_binding_level) { ! /* Don't output a duplicate symbol for this declaration. */ ! TREE_ASM_WRITTEN (newdecl) = 1; return 0; } /* Copy most of the decl-specific fields of NEWDECL into OLDDECL. ! But preserve OLDdECL's DECL_UID. */ { register unsigned olddecl_uid = DECL_UID (olddecl); --- 1969,1980 ---- if (different_binding_level) { ! /* Don't output a duplicate symbol or debugging information for this ! declaration. */ ! TREE_ASM_WRITTEN (newdecl) = DECL_IGNORED_P (newdecl) = 1; return 0; } /* Copy most of the decl-specific fields of NEWDECL into OLDDECL. ! But preserve OLDDECL's DECL_UID. */ { register unsigned olddecl_uid = DECL_UID (olddecl); *************** *** 2133,2137 **** TYPE_NAME (TREE_TYPE (x)) = x; } ! else if (TREE_TYPE (x) != error_mark_node) { tree tt = TREE_TYPE (x); --- 2134,2139 ---- TYPE_NAME (TREE_TYPE (x)) = x; } ! else if (TREE_TYPE (x) != error_mark_node ! && DECL_ORIGINAL_TYPE (x) == NULL_TREE) { tree tt = TREE_TYPE (x); *************** *** 5153,5159 **** if (! strcmp (IDENTIFIER_POINTER (declarator), "main")) warning ("cannot inline function `main'"); - else if (last && (TYPE_MAIN_VARIANT (TREE_VALUE (last)) - != void_type_node)) - warning ("inline declaration ignored for function with `...'"); else /* Assume that otherwise the function can be inlined. */ --- 5155,5158 ---- diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/c-lex.c gcc-2.8.1/c-lex.c *** gcc-2.8.0/c-lex.c Mon Dec 1 18:43:37 1997 --- gcc-2.8.1/c-lex.c Thu Feb 26 07:38:58 1998 *************** *** 1,4 **** /* Lexical analyzer for C and Objective C. ! Copyright (C) 1987, 88, 89, 92, 94-96, 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* Lexical analyzer for C and Objective C. ! Copyright (C) 1987, 88, 89, 92, 94-97, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 1475,1480 **** { tree type = double_type_node; - int exceeds_double = 0; int imag = 0; REAL_VALUE_TYPE value; jmp_buf handler; --- 1475,1480 ---- { tree type = double_type_node; int imag = 0; + int conversion_errno = 0; REAL_VALUE_TYPE value; jmp_buf handler; *************** *** 1505,1509 **** *p = 0; - errno = 0; /* Convert string to a double, checking for overflow. */ --- 1505,1508 ---- *************** *** 1575,1579 **** --- 1574,1580 ---- type = float_type_node; + errno = 0; value = REAL_VALUE_ATOF (copy, TYPE_MODE (type)); + conversion_errno = errno; /* A diagnostic is required here by some ANSI C testsuites. This is not pedwarn, become some people don't want *************** *** 1585,1589 **** --- 1586,1592 ---- { type = long_double_type_node; + errno = 0; value = REAL_VALUE_ATOF (copy, TYPE_MODE (type)); + conversion_errno = errno; if (REAL_VALUE_ISINF (value) && pedantic) warning ("floating point number exceeds range of `long double'"); *************** *** 1591,1595 **** --- 1594,1600 ---- else { + errno = 0; value = REAL_VALUE_ATOF (copy, TYPE_MODE (type)); + conversion_errno = errno; if (REAL_VALUE_ISINF (value) && pedantic) warning ("floating point number exceeds range of `double'"); *************** *** 1599,1613 **** } #ifdef ERANGE ! if (errno == ERANGE && !flag_traditional && pedantic) ! { ! /* ERANGE is also reported for underflow, ! so test the value to distinguish overflow from that. */ ! if (REAL_VALUES_LESS (dconst1, value) ! || REAL_VALUES_LESS (value, dconstm1)) ! { ! warning ("floating point number exceeds range of `double'"); ! exceeds_double = 1; ! } ! } #endif --- 1604,1613 ---- } #ifdef ERANGE ! /* ERANGE is also reported for underflow, ! so test the value to distinguish overflow from that. */ ! if (conversion_errno == ERANGE && !flag_traditional && pedantic ! && (REAL_VALUES_LESS (dconst1, value) ! || REAL_VALUES_LESS (value, dconstm1))) ! warning ("floating point number exceeds range of `double'"); #endif diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/c-parse.in gcc-2.8.1/c-parse.in *** gcc-2.8.0/c-parse.in Fri Oct 17 10:53:15 1997 --- gcc-2.8.1/c-parse.in Sat Feb 14 19:58:10 1998 *************** *** 1,4 **** /* YACC parser for C syntax and for Objective C. -*-c-*- ! Copyright (C) 1987, 88, 89, 92-6, 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* YACC parser for C syntax and for Objective C. -*-c-*- ! Copyright (C) 1987, 88, 89, 92-97, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 683,687 **** || IDENTIFIER_ERROR_LOCUS ($1) != current_function_decl) { ! error ("`%s' undeclared (first use this function)", IDENTIFIER_POINTER ($1)); --- 683,687 ---- || IDENTIFIER_ERROR_LOCUS ($1) != current_function_decl) { ! error ("`%s' undeclared (first use in this function)", IDENTIFIER_POINTER ($1)); diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/c-typeck.c gcc-2.8.1/c-typeck.c *** gcc-2.8.0/c-typeck.c Sat Nov 22 06:44:15 1997 --- gcc-2.8.1/c-typeck.c Mon Feb 2 16:33:11 1998 *************** *** 1,4 **** /* Build expressions with type checking for C compiler. ! Copyright (C) 1987, 88, 91-6, 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* Build expressions with type checking for C compiler. ! Copyright (C) 1987, 88, 91-7, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 803,807 **** tree type; { ! if (! INTEGRAL_TYPE_P (type) || TREE_UNSIGNED (type) == unsignedp) return type; --- 803,807 ---- tree type; { ! if ((! INTEGRAL_TYPE_P (type) && ! POINTER_TYPE_P (type)) || TREE_UNSIGNED (type) == unsignedp) return type; diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/calls.c gcc-2.8.1/calls.c *** gcc-2.8.0/calls.c Sun Nov 16 08:35:28 1997 --- gcc-2.8.1/calls.c Wed Feb 11 08:53:57 1998 *************** *** 1,4 **** /* Convert function calls to rtl insns, for GNU C compiler. ! Copyright (C) 1989, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* Convert function calls to rtl insns, for GNU C compiler. ! Copyright (C) 1989, 92-97, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 126,130 **** static int calls_function PROTO((tree, int)); static int calls_function_1 PROTO((tree, int)); ! static void emit_call_1 PROTO((rtx, tree, tree, int, int, rtx, rtx, int, rtx, int)); static void store_one_arg PROTO ((struct arg_data *, rtx, int, int, --- 126,131 ---- static int calls_function PROTO((tree, int)); static int calls_function_1 PROTO((tree, int)); ! static void emit_call_1 PROTO((rtx, tree, tree, HOST_WIDE_INT, ! HOST_WIDE_INT, rtx, rtx, int, rtx, int)); static void store_one_arg PROTO ((struct arg_data *, rtx, int, int, *************** *** 348,353 **** tree fndecl; tree funtype; ! int stack_size; ! int struct_value_size; rtx next_arg_reg; rtx valreg; --- 349,354 ---- tree fndecl; tree funtype; ! HOST_WIDE_INT stack_size; ! HOST_WIDE_INT struct_value_size; rtx next_arg_reg; rtx valreg; *************** *** 510,514 **** or if we are using the non-reentrant PCC calling convention or expecting the value in registers. */ ! int struct_value_size = 0; /* Nonzero if called function returns an aggregate in memory PCC style, by returning the address of where to find it. */ --- 511,515 ---- or if we are using the non-reentrant PCC calling convention or expecting the value in registers. */ ! HOST_WIDE_INT struct_value_size = 0; /* Nonzero if called function returns an aggregate in memory PCC style, by returning the address of where to find it. */ *************** *** 711,716 **** mark_addressable (d); structure_value_addr = XEXP (DECL_RTL (d), 0); ! MEM_IN_STRUCT_P (structure_value_addr) ! = AGGREGATE_TYPE_P (TREE_TYPE (exp)); target = 0; } --- 712,716 ---- mark_addressable (d); structure_value_addr = XEXP (DECL_RTL (d), 0); ! TREE_USED (d) = 1; target = 0; } diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/cccp.c gcc-2.8.1/cccp.c *** gcc-2.8.0/cccp.c Tue Dec 23 05:18:51 1997 --- gcc-2.8.1/cccp.c Thu Feb 26 07:38:59 1998 *************** *** 1,4 **** /* C Compatible Compiler Preprocessor (CCCP) ! Copyright (C) 1986, 87, 89, 92-96, 1997 Free Software Foundation, Inc. Written by Paul Rubin, June 1986 Adapted to ANSI C, Richard Stallman, Jan 1987 --- 1,4 ---- /* C Compatible Compiler Preprocessor (CCCP) ! Copyright (C) 1986, 87, 89, 92-97, 1998 Free Software Foundation, Inc. Written by Paul Rubin, June 1986 Adapted to ANSI C, Richard Stallman, Jan 1987 *************** *** 867,871 **** }; ! #define IS_INCLUDE_DIRECTIVE_TYPE(t) (T_INCLUDE <= (t) && (t) <= T_IMPORT) /* These functions are declared to return int instead of void since they --- 867,872 ---- }; ! #define IS_INCLUDE_DIRECTIVE_TYPE(t) \ ! ((int) T_INCLUDE <= (int) (t) && (int) (t) <= (int) T_IMPORT) /* These functions are declared to return int instead of void since they *************** *** 1060,1064 **** static char *macarg PROTO((struct argdata *, int)); ! static U_CHAR *macarg1 PROTO((U_CHAR *, U_CHAR *, int *, int *, int *, int)); static int discard_comments PROTO((U_CHAR *, int, int)); --- 1061,1065 ---- static char *macarg PROTO((struct argdata *, int)); ! static U_CHAR *macarg1 PROTO((U_CHAR *, U_CHAR *, struct hashnode *, int *, int *, int *, int)); static int discard_comments PROTO((U_CHAR *, int, int)); *************** *** 2756,2762 **** /* Handle any pending identifier; but the L in L'...' or L"..." is not an identifier. */ ! if (ident_length ! && ! (ident_length == 1 && hash == HASHSTEP (0, 'L'))) ! goto specialchar; start_line = ip->lineno; --- 2757,2765 ---- /* Handle any pending identifier; but the L in L'...' or L"..." is not an identifier. */ ! if (ident_length) { ! if (! (ident_length == 1 && hash == HASHSTEP (0, 'L'))) ! goto specialchar; ! ident_length = hash = 0; ! } start_line = ip->lineno; *************** *** 2777,2783 **** error_with_line (line_for_error (start_line), "unterminated string or character constant"); ! error_with_line (multiline_string_line, ! "possible real start of unterminated constant"); ! multiline_string_line = 0; } break; --- 2780,2788 ---- error_with_line (line_for_error (start_line), "unterminated string or character constant"); ! if (multiline_string_line) { ! error_with_line (multiline_string_line, ! "possible real start of unterminated constant"); ! multiline_string_line = 0; ! } } break; *************** *** 2808,2817 **** case '\\': - if (ibp >= limit) - break; if (*ibp == '\n') { ! /* Backslash newline is replaced by nothing at all, ! but keep the line counts correct. */ ! --obp; ++ibp; ++ip->lineno; --- 2813,2825 ---- case '\\': if (*ibp == '\n') { ! /* Backslash newline is replaced by nothing at all, but ! keep the line counts correct. But if we are reading ! from a macro, keep the backslash newline, since backslash ! newlines have already been processed. */ ! if (ip->macro) ! *obp++ = '\n'; ! else ! --obp; ++ibp; ++ip->lineno; *************** *** 2819,2825 **** /* ANSI stupidly requires that in \\ the second \ is *not* prevented from combining with a newline. */ ! while (*ibp == '\\' && ibp[1] == '\n') { ! ibp += 2; ! ++ip->lineno; } *obp++ = *ibp++; --- 2827,2835 ---- /* ANSI stupidly requires that in \\ the second \ is *not* prevented from combining with a newline. */ ! if (!ip->macro) { ! while (*ibp == '\\' && ibp[1] == '\n') { ! ibp += 2; ! ++ip->lineno; ! } } *obp++ = *ibp++; *************** *** 2838,2849 **** case '/': if (*ibp == '\\' && ibp[1] == '\n') newline_fix (ibp); - if (*ibp != '*' && !(cplusplus_comments && *ibp == '/')) goto randomchar; - if (ip->macro != 0) - goto randomchar; if (ident_length) goto specialchar; --- 2848,2858 ---- case '/': + if (ip->macro != 0) + goto randomchar; if (*ibp == '\\' && ibp[1] == '\n') newline_fix (ibp); if (*ibp != '*' && !(cplusplus_comments && *ibp == '/')) goto randomchar; if (ident_length) goto specialchar; *************** *** 2996,3002 **** if (ident_length == 0) { for (;;) { ! while (ibp[0] == '\\' && ibp[1] == '\n') { ! ++ip->lineno; ! ibp += 2; } c = *ibp++; --- 3005,3013 ---- if (ident_length == 0) { for (;;) { ! if (!ip->macro) { ! while (ibp[0] == '\\' && ibp[1] == '\n') { ! ++ip->lineno; ! ibp += 2; ! } } c = *ibp++; *************** *** 3009,3015 **** if it follows an `e' or `p'. */ if (c == 'e' || c == 'E' || c == 'p' || c == 'P') { ! while (ibp[0] == '\\' && ibp[1] == '\n') { ! ++ip->lineno; ! ibp += 2; } if (*ibp == '+' || *ibp == '-') { --- 3020,3028 ---- if it follows an `e' or `p'. */ if (c == 'e' || c == 'E' || c == 'p' || c == 'P') { ! if (!ip->macro) { ! while (ibp[0] == '\\' && ibp[1] == '\n') { ! ++ip->lineno; ! ibp += 2; ! } } if (*ibp == '+' || *ibp == '-') { *************** *** 3271,3303 **** old_oln = op->lineno; } - /* A comment: copy it unchanged or discard it. */ - else if (*ibp == '/' && ibp[1] == '*') { - if (put_out_comments) { - *obp++ = '/'; - *obp++ = '*'; - } else if (! traditional) { - *obp++ = ' '; - } - ibp += 2; - while (ibp + 1 != limit - && !(ibp[0] == '*' && ibp[1] == '/')) { - /* We need not worry about newline-marks, - since they are never found in comments. */ - if (*ibp == '\n') { - /* Newline in a file. Count it. */ - ++ip->lineno; - ++op->lineno; - } - if (put_out_comments) - *obp++ = *ibp++; - else - ibp++; - } - ibp += 2; - if (put_out_comments) { - *obp++ = '*'; - *obp++ = '/'; - } - } else if (is_space[*ibp]) { *obp++ = *ibp++; --- 3284,3287 ---- *************** *** 3326,3329 **** --- 3310,3366 ---- } } + else if (ip->macro) + break; + else if (*ibp == '/') { + /* If a comment, copy it unchanged or discard it. */ + if (ibp[1] == '\\' && ibp[2] == '\n') + newline_fix (ibp + 1); + if (ibp[1] == '*') { + if (put_out_comments) { + *obp++ = '/'; + *obp++ = '*'; + } else if (! traditional) { + *obp++ = ' '; + } + for (ibp += 2; ibp < limit; ibp++) { + /* We need not worry about newline-marks, + since they are never found in comments. */ + if (ibp[0] == '*') { + if (ibp[1] == '\\' && ibp[2] == '\n') + newline_fix (ibp + 1); + if (ibp[1] == '/') { + ibp += 2; + if (put_out_comments) { + *obp++ = '*'; + *obp++ = '/'; + } + break; + } + } + if (*ibp == '\n') { + /* Newline in a file. Count it. */ + ++ip->lineno; + ++op->lineno; + } + if (put_out_comments) + *obp++ = *ibp; + } + } else if (ibp[1] == '/' && cplusplus_comments) { + if (put_out_comments) { + *obp++ = '/'; + *obp++ = '/'; + } else if (! traditional) { + *obp++ = ' '; + } + for (ibp += 2; *ibp != '\n' || ibp[-1] == '\\'; ibp++) + if (put_out_comments) + *obp++ = *ibp; + } else + break; + } + else if (ibp[0] == '\\' && ibp[1] == '\n') { + ibp += 2; + ++ip->lineno; + } else break; } *************** *** 3547,3552 **** pedwarn ("%s in preprocessing directive", char_name[*bp]); bp++; ! } else if (*bp == '/' && (bp[1] == '*' ! || (cplusplus_comments && bp[1] == '/'))) { ip->bufp = bp + 2; skip_to_end_of_comment (ip, &ip->lineno, 0); --- 3584,3592 ---- pedwarn ("%s in preprocessing directive", char_name[*bp]); bp++; ! } else if (*bp == '/') { ! if (bp[1] == '\\' && bp[2] == '\n') ! newline_fix (bp + 1); ! if (! (bp[1] == '*' || (cplusplus_comments && bp[1] == '/'))) ! break; ip->bufp = bp + 2; skip_to_end_of_comment (ip, &ip->lineno, 0); *************** *** 3666,3671 **** break; case '\'': - case '\"': bp = skip_quoted_string (bp - 1, limit, ip->lineno, &ip->lineno, ©_directive, &unterminated); /* Don't bother calling the directive if we already got an error --- 3706,3728 ---- break; + case '"': + /* "..." is special for #include. */ + if (IS_INCLUDE_DIRECTIVE_TYPE (kt->type)) { + while (bp < limit && *bp != '\n') { + if (*bp == '"') { + bp++; + break; + } + if (*bp == '\\' && bp[1] == '\n') { + ip->lineno++; + copy_directive = 1; + bp++; + } + bp++; + } + break; + } + /* Fall through. */ case '\'': bp = skip_quoted_string (bp - 1, limit, ip->lineno, &ip->lineno, ©_directive, &unterminated); /* Don't bother calling the directive if we already got an error *************** *** 3833,3843 **** NULL_PTR, NULL_PTR, NULL_PTR); while (xp != bp1) ! if (*xp == '\\') { ! if (*++xp != '\n') ! *cp++ = '\\'; ! else ! xp++; ! } else ! *cp++ = *xp++; } break; --- 3890,3894 ---- NULL_PTR, NULL_PTR, NULL_PTR); while (xp != bp1) ! *cp++ = *xp++; } break; *************** *** 3876,3880 **** if (!no_output && already_output == 0 ! && (kt->type == T_DEFINE ? dump_names <= dump_macros : IS_INCLUDE_DIRECTIVE_TYPE (kt->type) ? dump_includes : kt->type == T_PRAGMA)) { --- 3927,3931 ---- if (!no_output && already_output == 0 ! && (kt->type == T_DEFINE ? (int) dump_names <= (int) dump_macros : IS_INCLUDE_DIRECTIVE_TYPE (kt->type) ? dump_includes : kt->type == T_PRAGMA)) { *************** *** 4203,4210 **** /* Copy the operand text, concatenating the strings. */ { ! while (fin != limit) { ! while (fin != limit && *fin != '\"') ! *fend++ = *fin++; ! fin++; if (fin == limit) break; --- 4254,4266 ---- /* Copy the operand text, concatenating the strings. */ { ! for (;;) { ! for (;;) { ! if (fin == limit) ! goto invalid_include_file_name; ! *fend = *fin++; ! if (*fend == '"') ! break; ! fend++; ! } if (fin == limit) break; *************** *** 4289,4296 **** fail: ! if (retried) { ! error ("`#%s' expects \"FILENAME\" or ", keyword->name); ! return 0; ! } else { /* Expand buffer and then remove any newline markers. We can't just tell expand_to_temp_buffer to omit the markers, --- 4345,4349 ---- fail: ! if (! retried) { /* Expand buffer and then remove any newline markers. We can't just tell expand_to_temp_buffer to omit the markers, *************** *** 4298,4302 **** --- 4351,4360 ---- FILE_BUF trybuf; U_CHAR *src; + int errors_before_expansion = errors; trybuf = expand_to_temp_buffer (buf, limit, 1, 0); + if (errors != errors_before_expansion) { + free (trybuf.buf); + goto invalid_include_file_name; + } src = trybuf.buf; buf = (U_CHAR *) alloca (trybuf.bufp - trybuf.buf + 1); *************** *** 4322,4328 **** *limit = 0; free (trybuf.buf); ! retried++; goto get_filename; } } --- 4380,4390 ---- *limit = 0; free (trybuf.buf); ! retried = 1; goto get_filename; } + + invalid_include_file_name: + error ("`#%s' expects \"FILENAME\" or ", keyword->name); + return 0; } *************** *** 7090,7093 **** --- 7152,7156 ---- U_CHAR *beg_of_group = bp; int beg_lineno = ip->lineno; + int skipping_include_directive = 0; if (output_conditionals && op != 0) { *************** *** 7118,7122 **** --- 7181,7211 ---- } break; + case '<': + if (skipping_include_directive) { + while (bp < endb && *bp != '>' && *bp != '\n') { + if (*bp == '\\' && bp[1] == '\n') { + ip->lineno++; + bp++; + } + bp++; + } + } + break; case '\"': + if (skipping_include_directive) { + while (bp < endb && *bp != '\n') { + if (*bp == '"') { + bp++; + break; + } + if (*bp == '\\' && bp[1] == '\n') { + ip->lineno++; + bp++; + } + bp++; + } + break; + } + /* Fall through. */ case '\'': bp = skip_quoted_string (bp - 1, endb, ip->lineno, &ip->lineno, *************** *** 7124,7137 **** break; case '\\': ! /* Char after backslash loses its special meaning. */ ! if (bp < endb) { ! if (*bp == '\n') ! ++ip->lineno; /* But do update the line-count. */ bp++; - } break; case '\n': ++ip->lineno; beg_of_line = bp; break; case '%': --- 7213,7227 ---- break; case '\\': ! /* Char after backslash loses its special meaning in some cases. */ ! if (*bp == '\n') { ! ++ip->lineno; ! bp++; ! } else if (traditional && bp < endb) bp++; break; case '\n': ++ip->lineno; beg_of_line = bp; + skipping_include_directive = 0; break; case '%': *************** *** 7195,7198 **** --- 7285,7290 ---- bp += 2; else if (*bp == '/') { + if (bp[1] == '\\' && bp[2] == '\n') + newline_fix (bp + 1); if (bp[1] == '*') { for (bp += 2; ; bp++) { *************** *** 7202,7205 **** --- 7294,7299 ---- if (bp[-1] == '/' && warn_comments) warning ("`/*' within comment"); + if (bp[1] == '\\' && bp[2] == '\n') + newline_fix (bp + 1); if (bp[1] == '/') break; *************** *** 7322,7326 **** break; ! default: break; } --- 7416,7426 ---- break; ! case T_INCLUDE: ! case T_INCLUDE_NEXT: ! case T_IMPORT: ! skipping_include_directive = 1; ! break; ! ! default: break; } *************** *** 7646,7653 **** bp += 2; } ! if (*bp == '\n' && count_newlines) { if (backslash_newlines_p) *backslash_newlines_p = 1; ! ++*count_newlines; } bp++; --- 7746,7754 ---- bp += 2; } ! if (*bp == '\n') { if (backslash_newlines_p) *backslash_newlines_p = 1; ! if (count_newlines) ! ++*count_newlines; } bp++; *************** *** 8083,8109 **** c = arg->raw[i]; ! /* Special markers Newline Space ! generate nothing for a stringified argument. */ ! if (c == '\n' && arg->raw[i+1] != '\n') { ! i++; ! continue; ! } ! /* Internal sequences of whitespace are replaced by one space ! except within an string or char token. */ ! if (! in_string ! && (c == '\n' ? arg->raw[i+1] == '\n' : is_space[c])) { ! while (1) { ! /* Note that Newline Space does occur within whitespace ! sequences; consider it part of the sequence. */ ! if (c == '\n' && is_space[arg->raw[i+1]]) ! i += 2; ! else if (c != '\n' && is_space[c]) ! i++; ! else break; ! c = arg->raw[i]; } - i--; - c = ' '; } --- 8184,8211 ---- c = arg->raw[i]; ! if (! in_string) { ! /* Special markers Newline Space ! generate nothing for a stringified argument. */ ! if (c == '\n' && arg->raw[i+1] != '\n') { ! i++; ! continue; ! } ! /* Internal sequences of whitespace are replaced by one space ! except within an string or char token. */ ! if (c == '\n' ? arg->raw[i+1] == '\n' : is_space[c]) { ! while (1) { ! /* Note that Newline Space does occur within whitespace ! sequences; consider it part of the sequence. */ ! if (c == '\n' && is_space[arg->raw[i+1]]) ! i += 2; ! else if (c != '\n' && is_space[c]) ! i++; ! else break; ! c = arg->raw[i]; ! } ! i--; ! c = ' '; } } *************** *** 8123,8132 **** if (c == '\"' || (in_string && c == '\\')) xbuf[totlen++] = '\\'; ! if (isprint (c)) ! xbuf[totlen++] = c; ! else { ! sprintf ((char *) &xbuf[totlen], "\\%03o", (unsigned int) c); ! totlen += 4; ! } } if (!traditional) --- 8225,8232 ---- if (c == '\"' || (in_string && c == '\\')) xbuf[totlen++] = '\\'; ! /* We used to output e.g. \008 for control characters here, ! but this doesn't conform to the C Standard. ! Just output the characters as-is. */ ! xbuf[totlen++] = c; } if (!traditional) *************** *** 8282,8286 **** /* Try to parse as much of the argument as exists at this input stack level. */ ! U_CHAR *bp = macarg1 (ip->bufp, ip->buf + ip->length, &paren, &newlines, &comments, rest_args); --- 8382,8386 ---- /* Try to parse as much of the argument as exists at this input stack level. */ ! U_CHAR *bp = macarg1 (ip->bufp, ip->buf + ip->length, ip->macro, &paren, &newlines, &comments, rest_args); *************** *** 8320,8324 **** newlines = 0; comments = 0; ! bp = macarg1 (ip->bufp, ip->buf + ip->length, &paren, &newlines, &comments, rest_args); final_start = bufsize; --- 8420,8424 ---- newlines = 0; comments = 0; ! bp = macarg1 (ip->bufp, ip->buf + ip->length, ip->macro, &paren, &newlines, &comments, rest_args); final_start = bufsize; *************** *** 8383,8388 **** if (c == '\"' || c == '\\') /* escape these chars */ totlen++; - else if (!isprint (c)) - totlen += 3; } argptr->stringified_length = totlen; --- 8483,8486 ---- *************** *** 8392,8395 **** --- 8490,8494 ---- /* Scan text from START (inclusive) up to LIMIT (exclusive), + taken from the expansion of MACRO, counting parens in *DEPTHPTR, and return if reach LIMIT *************** *** 8405,8411 **** static U_CHAR * ! macarg1 (start, limit, depthptr, newlines, comments, rest_args) U_CHAR *start; register U_CHAR *limit; int *depthptr, *newlines, *comments; int rest_args; --- 8504,8511 ---- static U_CHAR * ! macarg1 (start, limit, macro, depthptr, newlines, comments, rest_args) U_CHAR *start; register U_CHAR *limit; + struct hashnode *macro; int *depthptr, *newlines, *comments; int rest_args; *************** *** 8424,8434 **** case '\\': /* Traditionally, backslash makes following char not special. */ ! if (bp + 1 < limit && traditional) ! { ! bp++; ! /* But count source lines anyway. */ ! if (*bp == '\n') ! ++*newlines; ! } break; case '\n': --- 8524,8529 ---- case '\\': /* Traditionally, backslash makes following char not special. */ ! if (traditional && bp + 1 < limit && bp[1] != '\n') ! bp++; break; case '\n': *************** *** 8436,8439 **** --- 8531,8536 ---- break; case '/': + if (macro) + break; if (bp[1] == '\\' && bp[2] == '\n') newline_fix (bp + 1); *************** *** 8476,8481 **** if (*bp == '\n') ++*newlines; ! while (*bp == '\\' && bp[1] == '\n') { ! bp += 2; } } else if (*bp == '\n') { --- 8573,8581 ---- if (*bp == '\n') ++*newlines; ! if (!macro) { ! while (*bp == '\\' && bp[1] == '\n') { ! bp += 2; ! ++*newlines; ! } } } else if (*bp == '\n') { *************** *** 8573,8586 **** else obp[-1] = ' '; ! ibp++; ! while (ibp + 1 < limit) { ! if (ibp[0] == '*' ! && ibp[1] == '\\' && ibp[2] == '\n') ! newline_fix (ibp + 1); ! if (ibp[0] == '*' && ibp[1] == '/') ! break; ! ibp++; } - ibp += 2; break; --- 8673,8686 ---- else obp[-1] = ' '; ! while (++ibp < limit) { ! if (ibp[0] == '*') { ! if (ibp[1] == '\\' && ibp[2] == '\n') ! newline_fix (ibp + 1); ! if (ibp[1] == '/') { ! ibp += 2; ! break; ! } ! } } break; *************** *** 8598,8605 **** if (c == '\n' && quotec == '\'') break; ! if (c == '\\' && ibp < limit) { ! while (*ibp == '\\' && ibp[1] == '\n') ! ibp += 2; ! *obp++ = *ibp++; } } --- 8698,8711 ---- if (c == '\n' && quotec == '\'') break; ! if (c == '\\') { ! if (ibp < limit && *ibp == '\n') { ! ibp++; ! obp--; ! } else { ! while (*ibp == '\\' && ibp[1] == '\n') ! ibp += 2; ! if (ibp < limit) ! *obp++ = *ibp++; ! } } } *************** *** 8652,8656 **** while (ibp < limit) { *obp++ = c = *ibp++; ! if (c == quotec) break; if (c == '\n' && quotec == '\'') --- 8758,8762 ---- while (ibp < limit) { *obp++ = c = *ibp++; ! if (c == quotec && ibp[-2] != '\\') break; if (c == '\n' && quotec == '\'') *************** *** 8739,8742 **** --- 8845,8849 ---- char *name; { + int e = errno; int i; FILE_BUF *ip = NULL; *************** *** 8753,8757 **** fprintf (stderr, "%s:%d: ", ip->nominal_fname, ip->lineno); ! fprintf (stderr, "%s: %s\n", name, my_strerror (errno)); errors++; --- 8860,8864 ---- fprintf (stderr, "%s:%d: ", ip->nominal_fname, ip->lineno); ! fprintf (stderr, "%s: %s\n", name, my_strerror (e)); errors++; *************** *** 9587,9594 **** return; while (p != p1) ! if (*p == '\\' && p[1] == '\n') ! p += 2; ! else ! *q++ = *p++; } else if (*p == '\\' && p[1] == '\n') p += 2; --- 9694,9698 ---- return; while (p != p1) ! *q++ = *p++; } else if (*p == '\\' && p[1] == '\n') p += 2; *************** *** 9975,9980 **** char *name; { ! fprintf (stderr, "%s: ", progname); ! fprintf (stderr, "%s: %s\n", name, my_strerror (errno)); errors++; } --- 10079,10083 ---- char *name; { ! fprintf (stderr, "%s: %s: %s\n", progname, name, my_strerror (errno)); errors++; } diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/combine.c gcc-2.8.1/combine.c *** gcc-2.8.0/combine.c Wed Jan 7 17:30:01 1998 --- gcc-2.8.1/combine.c Sat Feb 14 16:40:24 1998 *************** *** 2352,2361 **** distribute_notes (gen_rtx (EXPR_LIST, REG_DEAD, i3dest_killed, NULL_RTX), ! NULL_RTX, i2, NULL_RTX, NULL_RTX, NULL_RTX); else distribute_notes (gen_rtx (EXPR_LIST, REG_DEAD, i3dest_killed, NULL_RTX), NULL_RTX, i3, newi2pat ? i2 : NULL_RTX, ! NULL_RTX, NULL_RTX); } --- 2352,2361 ---- distribute_notes (gen_rtx (EXPR_LIST, REG_DEAD, i3dest_killed, NULL_RTX), ! NULL_RTX, i2, NULL_RTX, elim_i2, elim_i1); else distribute_notes (gen_rtx (EXPR_LIST, REG_DEAD, i3dest_killed, NULL_RTX), NULL_RTX, i3, newi2pat ? i2 : NULL_RTX, ! elim_i2, elim_i1); } *************** *** 11308,11311 **** --- 11308,11320 ---- { rtx set = single_set (tem); + rtx inner_dest = 0; + + if (set != 0) + for (inner_dest = SET_DEST (set); + GET_CODE (inner_dest) == STRICT_LOW_PART + || GET_CODE (inner_dest) == SUBREG + || GET_CODE (inner_dest) == ZERO_EXTRACT; + inner_dest = XEXP (inner_dest, 0)) + ; /* Verify that it was the set, and not a clobber that *************** *** 11313,11320 **** if (set != 0 && ! side_effects_p (SET_SRC (set)) ! && (rtx_equal_p (XEXP (note, 0), SET_DEST (set)) ! || (GET_CODE (SET_DEST (set)) == SUBREG ! && rtx_equal_p (XEXP (note, 0), ! XEXP (SET_DEST (set), 0))))) { /* Move the notes and links of TEM elsewhere. --- 11322,11326 ---- if (set != 0 && ! side_effects_p (SET_SRC (set)) ! && rtx_equal_p (XEXP (note, 0), inner_dest)) { /* Move the notes and links of TEM elsewhere. *************** *** 11333,11336 **** --- 11339,11356 ---- NOTE_SOURCE_FILE (tem) = 0; } + /* If the register is both set and used here, put the + REG_DEAD note here, but place a REG_UNUSED note + here too unless there already is one. */ + else if (reg_referenced_p (XEXP (note, 0), + PATTERN (tem))) + { + place = tem; + + if (! find_regno_note (tem, REG_UNUSED, + REGNO (XEXP (note, 0)))) + REG_NOTES (tem) + = gen_rtx (EXPR_LIST, REG_UNUSED, XEXP (note, 0), + REG_NOTES (tem)); + } else { *************** *** 11389,11399 **** /* If the register is set or already dead at PLACE, we needn't do ! anything with this note if it is still a REG_DEAD note. - Note that we cannot use just `dead_or_set_p' here since we can - convert an assignment to a register into a bit-field assignment. - Therefore, we must also omit the note if the register is the - target of a bitfield assignment. */ - if (place && REG_NOTE_KIND (note) == REG_DEAD) { --- 11409,11418 ---- /* If the register is set or already dead at PLACE, we needn't do ! anything with this note if it is still a REG_DEAD note. ! We can here if it is set at all, not if is it totally replace, ! which is what `dead_or_set_p' checks, so also check for it being ! set partially. */ ! if (place && REG_NOTE_KIND (note) == REG_DEAD) { diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/alpha/alpha.c gcc-2.8.1/config/alpha/alpha.c *** gcc-2.8.0/config/alpha/alpha.c Wed Dec 3 08:09:01 1997 --- gcc-2.8.1/config/alpha/alpha.c Fri Feb 6 20:23:50 1998 *************** *** 1,4 **** /* Subroutines used for code generation on the DEC Alpha. ! Copyright (C) 1992, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu) --- 1,4 ---- /* Subroutines used for code generation on the DEC Alpha. ! Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu) *************** *** 2084,2089 **** /* Describe our frame. */ ! fprintf (file, "\t.frame $%d,%d,$26,%d\n", ! unwind_regno, frame_size, rsa_offset); /* If we have to allocate space for outgoing args, do it now. */ --- 2084,2099 ---- /* Describe our frame. */ ! fprintf (file, "\t.frame $%d,", unwind_regno); ! ! /* If the frame size is larger than an integer, print it as zero to ! avoid an assembler error. We won't be properly describing such a ! frame, but that's the best we can do. */ ! fprintf (file, HOST_WIDE_INT_PRINT_DEC, ! #if HOST_BITS_PER_WIDE_INT == 64 ! frame_size >= (1l << 31) ? 0: ! #endif ! frame_size ! ); ! fprintf (file, ",$26,%d\n", rsa_offset); /* If we have to allocate space for outgoing args, do it now. */ *************** *** 2230,2234 **** output_prolog (file, size) FILE *file; ! int size; { HOST_WIDE_INT out_args_size --- 2240,2244 ---- output_prolog (file, size) FILE *file; ! HOST_WIDE_INT size; { HOST_WIDE_INT out_args_size *************** *** 2385,2392 **** if (!flag_inhibit_size_directive) { ! fprintf (file, "\t.frame $%d,%d,$26,%d\n", (frame_pointer_needed ! ? HARD_FRAME_POINTER_REGNUM : STACK_POINTER_REGNUM), ! frame_size, current_function_pretend_args_size); } --- 2395,2412 ---- if (!flag_inhibit_size_directive) { ! fprintf (file, "\t.frame $%d,", (frame_pointer_needed ! ? HARD_FRAME_POINTER_REGNUM : STACK_POINTER_REGNUM)); ! ! /* If the frame size is larger than an integer, print it as zero to ! avoid an assembler error. We won't be properly describing such a ! frame, but that's the best we can do. */ ! fprintf (file, HOST_WIDE_INT_PRINT_DEC, ! #if HOST_BITS_PER_WIDE_INT == 64 ! frame_size >= (1l << 31) ? 0 : ! #endif ! frame_size ! ); ! fprintf (file, ",$26,%d\n", current_function_pretend_args_size); } *************** *** 2412,2417 **** /* Print the register mask and do floating-point saves. */ if (reg_mask && !flag_inhibit_size_directive) ! fprintf (file, "\t.mask 0x%x,%d\n", reg_mask, ! actual_start_reg_offset - frame_size); start_reg_offset = reg_offset; --- 2432,2444 ---- /* Print the register mask and do floating-point saves. */ if (reg_mask && !flag_inhibit_size_directive) ! { ! fprintf (file, "\t.mask 0x%x,", reg_mask); ! fprintf (file, HOST_WIDE_INT_PRINT_DEC, ! #if HOST_BITS_PER_WIDE_INT == 64 ! frame_size >= (1l << 31) ? 0 : ! #endif ! actual_start_reg_offset - frame_size); ! fprintf (file, "\n"); ! } start_reg_offset = reg_offset; *************** *** 2607,2611 **** else if (name != current_function_file ! && strcmp (name, current_function_file) != 0) { if (inside_function && ! TARGET_GAS) --- 2634,2638 ---- else if (name != current_function_file ! && strcmp (name, current_function_file) != 0) { if (inside_function && ! TARGET_GAS) diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/alpha/elf.h gcc-2.8.1/config/alpha/elf.h *** gcc-2.8.0/config/alpha/elf.h Fri Dec 5 07:11:23 1997 --- gcc-2.8.1/config/alpha/elf.h Fri Feb 20 08:22:02 1998 *************** *** 1,4 **** /* Definitions of target machine for GNU compiler, for DEC Alpha w/ELF. ! Copyright (C) 1996, 1997 Free Software Foundation, Inc. Contributed by Richard Henderson (rth@tamu.edu). --- 1,4 ---- /* Definitions of target machine for GNU compiler, for DEC Alpha w/ELF. ! Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. Contributed by Richard Henderson (rth@tamu.edu). *************** *** 58,61 **** --- 58,74 ---- #endif + #ifndef USE_GNULIBC_1 + #undef DEFAULT_VTABLE_THUNKS + #define DEFAULT_VTABLE_THUNKS 1 + #endif + + #ifndef USE_GNULIBC_1 + #undef LIB_SPEC + #define LIB_SPEC \ + "%{shared: -lc} \ + %{!shared: %{mieee-fp:-lieee} %{pthread:-lpthread} \ + %{profile:-lc_p} %{!profile: -lc}}" + #endif + /* Output at beginning of assembler file. */ *************** *** 494,498 **** "%{!shared: \ %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}}\ ! crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}" /* Provide a ENDFILE_SPEC appropriate for GNU/Linux. Here we tack on --- 507,511 ---- "%{!shared: \ %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}}\ ! crti.o%s crtbegin.o%s" /* Provide a ENDFILE_SPEC appropriate for GNU/Linux. Here we tack on *************** *** 504,506 **** #undef ENDFILE_SPEC #define ENDFILE_SPEC \ ! "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s" --- 517,519 ---- #undef ENDFILE_SPEC #define ENDFILE_SPEC \ ! "crtend.o%s crtn.o%s" diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/arm/arm.c gcc-2.8.1/config/arm/arm.c *** gcc-2.8.0/config/arm/arm.c Sun Dec 28 08:16:20 1997 --- gcc-2.8.1/config/arm/arm.c Tue Feb 3 17:20:54 1998 *************** *** 1,4 **** /* Output routines for GCC for ARM/RISCiX. ! Copyright (C) 1991, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. Contributed by Pieter `Tiggr' Schoenmakers (rcpieter@win.tue.nl) and Martin Simmons (@harleqn.co.uk). --- 1,4 ---- /* Output routines for GCC for ARM/RISCiX. ! Copyright (C) 1991, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. Contributed by Pieter `Tiggr' Schoenmakers (rcpieter@win.tue.nl) and Martin Simmons (@harleqn.co.uk). *************** *** 3272,3275 **** --- 3272,3285 ---- emit_insn (gen_zero_extendqisi2 (operands[2], gen_rtx (MEM, QImode, base))); + /* Handle the case where the address is too complex to be offset by 1. */ + if (GET_CODE (base) == MINUS + || (GET_CODE (base) == PLUS && GET_CODE (XEXP (base, 1)) != CONST_INT)) + { + rtx base_plus = gen_rtx (REG, SImode, REGNO (operands[0])); + + emit_insn (gen_rtx (SET, VOIDmode, base_plus, base)); + base = base_plus; + } + emit_insn (gen_zero_extendqisi2 (gen_rtx (SUBREG, SImode, operands[0], 0), gen_rtx (MEM, QImode, *************** *** 3525,3528 **** --- 3535,3539 ---- int count = 0; rtx found_barrier = 0; + rtx last = from; while (from && count < max_count) *************** *** 3538,3546 **** { rtx src = SET_SRC (PATTERN (from)); ! count += 2; } else count += get_attr_length (from); from = NEXT_INSN (from); } --- 3549,3558 ---- { rtx src = SET_SRC (PATTERN (from)); ! count += 8; } else count += get_attr_length (from); + last = from; from = NEXT_INSN (from); } *************** *** 3553,3557 **** if (from) ! from = PREV_INSN (from); else from = get_last_insn (); --- 3565,3569 ---- if (from) ! from = PREV_INSN (last); else from = get_last_insn (); diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/arm/arm.md gcc-2.8.1/config/arm/arm.md *** gcc-2.8.0/config/arm/arm.md Fri Dec 5 06:19:54 1997 --- gcc-2.8.1/config/arm/arm.md Sat Feb 14 09:59:49 1998 *************** *** 1,4 **** ;;- Machine description for Advanced RISC Machines' ARM for GNU compiler ! ;; Copyright (C) 1991, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. ;; Contributed by Pieter `Tiggr' Schoenmakers (rcpieter@win.tue.nl) ;; and Martin Simmons (@harleqn.co.uk). --- 1,4 ---- ;;- Machine description for Advanced RISC Machines' ARM for GNU compiler ! ;; Copyright (C) 1991, 93-97, 1998 Free Software Foundation, Inc. ;; Contributed by Pieter `Tiggr' Schoenmakers (rcpieter@win.tue.nl) ;; and Martin Simmons (@harleqn.co.uk). *************** *** 3919,3924 **** rtx ccreg; ! /* When compiling for SOFT_FLOAT, ensure both arms are in registers. */ ! if (! TARGET_HARD_FLOAT) operands[3] = force_reg (SFmode, operands[3]); --- 3919,3926 ---- rtx ccreg; ! /* When compiling for SOFT_FLOAT, ensure both arms are in registers. ! Otherwise, ensure it is a valid FP add operand */ ! if ((! TARGET_HARD_FLOAT) ! || (! fpu_add_operand (operands[3], SFmode))) operands[3] = force_reg (SFmode, operands[3]); *************** *** 3933,3937 **** (if_then_else:DF (match_operand 1 "comparison_operator" "") (match_operand:DF 2 "s_register_operand" "") ! (match_operand:DF 3 "nonmemory_operand" "")))] "TARGET_HARD_FLOAT" " --- 3935,3939 ---- (if_then_else:DF (match_operand 1 "comparison_operator" "") (match_operand:DF 2 "s_register_operand" "") ! (match_operand:DF 3 "fpu_add_operand" "")))] "TARGET_HARD_FLOAT" " diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/arm/t-semi gcc-2.8.1/config/arm/t-semi *** gcc-2.8.0/config/arm/t-semi Tue May 13 14:43:57 1997 --- gcc-2.8.1/config/arm/t-semi Wed Jan 14 20:09:11 1998 *************** *** 1,5 **** # Just for these, we omit the frame pointer since it makes such a big # difference. It is then pointless adding debugging. ! LIBGCC2_CFLAGS=-O2 -fomit-frame-pointer $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) -g0 # Don't build enquire --- 1,5 ---- # Just for these, we omit the frame pointer since it makes such a big # difference. It is then pointless adding debugging. ! LIBGCC2_CFLAGS=-O2 -fomit-frame-pointer $(LIBGCC2_INCLUDES) $(GCC_CFLAGS) -g0 # Don't build enquire diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/arm/x-riscix gcc-2.8.1/config/arm/x-riscix *** gcc-2.8.0/config/arm/x-riscix Sun Oct 23 08:54:04 1994 --- gcc-2.8.1/config/arm/x-riscix Mon Feb 2 16:40:19 1998 *************** *** 7,9 **** CC=$(OLDCC) FIXPROTO_DEFINES= -D_POSIX_SOURCE -D_XOPEN_C -D_BSD_C -D_XOPEN_SOURCE - INSTALL=$(srcdir)/install.sh -c --- 7,8 ---- diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/convex/x-convex gcc-2.8.1/config/convex/x-convex *** gcc-2.8.0/config/convex/x-convex Fri May 7 07:53:22 1993 --- gcc-2.8.1/config/convex/x-convex Wed Jan 14 20:09:11 1998 *************** *** 1,4 **** # ld can make exe's c2-only if this lib is searched even though not loaded ! CCLIBFLAGS = -tm c1 # Use -pcc to avoid surprises. --- 1,4 ---- # ld can make exe's c2-only if this lib is searched even though not loaded ! CCLIBFLAGS = -tm c1 # Use -pcc to avoid surprises. diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/i386/crtdll.h gcc-2.8.1/config/i386/crtdll.h *** gcc-2.8.0/config/i386/crtdll.h Wed Dec 31 19:00:00 1969 --- gcc-2.8.1/config/i386/crtdll.h Wed Feb 25 20:03:55 1998 *************** *** 0 **** --- 1,33 ---- + /* Operating system specific defines to be used when targeting GCC for + hosting on Windows32, using GNU tools and the Windows32 API Library, + as distinct from winnt.h, which is used to build GCC for use with a + windows style library and tool set and uses the Microsoft tools. + This variant uses CRTDLL.DLL insted of MSVCRTDLL.DLL. + Copyright (C) 1998 Free Software Foundation, Inc. + + This file is part of GNU CC. + + GNU CC is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + GNU CC is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNU CC; see the file COPYING. If not, write to + the Free Software Foundation, 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + + #undef LIBGCC_SPEC + #define LIBGCC_SPEC "-lmingw32 -lgcc -lmoldname -lcrtdll" + + /* Specify a different entry point when linking a DLL */ + #undef STARTFILE_SPEC + #define STARTFILE_SPEC "%{mdll:dllcrt1%O%s} %{!mdll:crt1%O%s}" + + #undef MATH_LIBRARY + #define MATH_LIBRARY "-lcrtdll" diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/i386/cygwin32.h gcc-2.8.1/config/i386/cygwin32.h *** gcc-2.8.0/config/i386/cygwin32.h Sun Oct 26 18:57:24 1997 --- gcc-2.8.1/config/i386/cygwin32.h Thu Feb 12 07:23:39 1998 *************** *** 3,7 **** as distinct from winnt.h, which is used to build GCC for use with a windows style library and tool set and uses the Microsoft tools. ! Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 3,7 ---- as distinct from winnt.h, which is used to build GCC for use with a windows style library and tool set and uses the Microsoft tools. ! Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 22,26 **** Boston, MA 02111-1307, USA. */ - #define YES_UNDERSCORES --- 22,25 ---- *************** *** 52,56 **** #undef LIB_SPEC ! #define LIB_SPEC "-lcygwin %{mwindows:-luser32 -lgdi32 -lcomdlg32} -lkernel32" #define LINK_SPEC "%{mwindows:--subsystem windows}" --- 51,56 ---- #undef LIB_SPEC ! #define LIB_SPEC "-lcygwin %{mwindows:-luser32 -lgdi32 -lcomdlg32} -lkernel32 \ ! -ladvapi32 -lshell32" #define LINK_SPEC "%{mwindows:--subsystem windows}" *************** *** 150,153 **** --- 150,174 ---- #endif + /* This macro gets just the user-specified name out of the string in a + SYMBOL_REF. Discard trailing @[NUM] encoded by ENCODE_SECTION_INFO. */ + + #undef STRIP_NAME_ENCODING + #define STRIP_NAME_ENCODING(VAR,SYMBOL_NAME) \ + do { \ + char *_p; \ + char *_name = ((SYMBOL_NAME) + ((SYMBOL_NAME)[0] == '*')); \ + for (_p = _name; *_p && *_p != '@'; ++_p) \ + ; \ + if (*_p == '@') \ + { \ + int _len = _p - _name; \ + (VAR) = (char *) alloca (_len + 1); \ + strncpy ((VAR), _name, _len); \ + (VAR)[_len] = '\0'; \ + } \ + else \ + (VAR) = _name; \ + } while (0) + /* Emit code to check the stack when allocating more that 4000 bytes in one go. */ *************** *** 206,207 **** --- 227,231 ---- #undef ASM_COMMENT_START #define ASM_COMMENT_START " #" + + /* Don't assume anything about the header files. */ + #define NO_IMPLICIT_EXTERN_C diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/i386/gmon-sol2.c gcc-2.8.1/config/i386/gmon-sol2.c *** gcc-2.8.0/config/i386/gmon-sol2.c Wed Dec 3 08:09:17 1997 --- gcc-2.8.1/config/i386/gmon-sol2.c Fri Feb 6 11:00:07 1998 *************** *** 32,45 **** */ - /* - * Re rework of the solaris 2 version of gmon by J.W.Hawtin 12/8/1996 - * Does not work right yet. - */ - /* ! * This is a modified gmon.c by J.W.Hawtin , * 14/8/96 based on the original gmon.c in GCC and the hacked version * solaris 2 sparc version (config/sparc/gmon-sol.c) by Mark Eichin. To do ! * process profiling on solaris 2.4 X86 * * It must be used in conjunction with sol2-gc1.asm, which is used to start --- 32,40 ---- */ /* ! * This is a modified gmon.c by J.W.Hawtin , * 14/8/96 based on the original gmon.c in GCC and the hacked version * solaris 2 sparc version (config/sparc/gmon-sol.c) by Mark Eichin. To do ! * process profiling on solaris 2.X X86 * * It must be used in conjunction with sol2-gc1.asm, which is used to start *************** *** 48,52 **** * Differences. * ! * On Solaris 2 _mcount is called my library functions not mcount, so support * has been added for both. * --- 43,47 ---- * Differences. * ! * On Solaris 2 _mcount is called by library functions not mcount, so support * has been added for both. * *************** *** 265,268 **** --- 260,264 ---- register struct tostruct *prevtop; register long toindex; + static char already_setup; /* *************** *** 278,281 **** --- 274,288 ---- frompcindex = (void *) __builtin_return_address (1); + if(!already_setup) { + extern etext(); + already_setup = 1; + /* monstartup(0, etext); */ + monstartup(0x08040000, etext); + #ifdef USE_ONEXIT + on_exit(_mcleanup, 0); + #else + atexit(_mcleanup); + #endif + } /* * check that we are profiling diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/i386/i386.h gcc-2.8.1/config/i386/i386.h *** gcc-2.8.0/config/i386/i386.h Sun Dec 14 06:48:35 1997 --- gcc-2.8.1/config/i386/i386.h Fri Feb 6 10:52:41 1998 *************** *** 1,5 **** /* Definitions of target machine for GNU compiler for Intel X86 (386, 486, Pentium). ! Copyright (C) 1988, 92, 94, 95, 96, 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,5 ---- /* Definitions of target machine for GNU compiler for Intel X86 (386, 486, Pentium). ! Copyright (C) 1988, 92, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 436,445 **** /* Required on the 386 since it doesn't have bitfield insns. */ #define PCC_BITFIELD_TYPE_MATTERS 1 - - /* An integer expression for the size in bits of the largest integer - machine mode that should actually be used. All integer machine modes of - this size or smaller can be used for structures and unions with the - appropriate sizes. */ - #define MAX_FIXED_MODE_SIZE 32 /* Maximum power of 2 that code can be aligned to. */ --- 436,439 ---- diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/i386/i386.md gcc-2.8.1/config/i386/i386.md *** gcc-2.8.0/config/i386/i386.md Mon Nov 3 18:37:27 1997 --- gcc-2.8.1/config/i386/i386.md Sat Feb 14 07:14:13 1998 *************** *** 1,4 **** ; GCC machine description for Intel X86. ! ;; Copyright (C) 1988, 1994, 1995, 1996, 1997 Free Software Foundation, Inc. ;; Mostly by William Schelter. --- 1,4 ---- ; GCC machine description for Intel X86. ! ;; Copyright (C) 1988, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. ;; Mostly by William Schelter. *************** *** 7254,7262 **** (define_expand "movsicc" [(match_dup 4) ! (parallel [(set (match_operand 0 "register_operand" "") (if_then_else:SI (match_operand 1 "comparison_operator" "") ! (match_operand:SI 2 "general_operand" "") ! (match_operand:SI 3 "general_operand" ""))) ! (clobber (match_scratch:SI 4 "=&r"))])] "TARGET_CMOVE" " --- 7254,7261 ---- (define_expand "movsicc" [(match_dup 4) ! (set (match_operand 0 "register_operand" "") (if_then_else:SI (match_operand 1 "comparison_operator" "") ! (match_operand:SI 2 "nonimmediate_operand" "") ! (match_operand:SI 3 "nonimmediate_operand" "")))] "TARGET_CMOVE" " *************** *** 7267,7275 **** (define_expand "movhicc" [(match_dup 4) ! (parallel [(set (match_operand 0 "register_operand" "") (if_then_else:HI (match_operand 1 "comparison_operator" "") ! (match_operand:HI 2 "general_operand" "") ! (match_operand:HI 3 "general_operand" ""))) ! (clobber (match_scratch:SI 4 "=&r"))])] "TARGET_CMOVE" " --- 7266,7273 ---- (define_expand "movhicc" [(match_dup 4) ! (set (match_operand 0 "register_operand" "") (if_then_else:HI (match_operand 1 "comparison_operator" "") ! (match_operand:HI 2 "nonimmediate_operand" "") ! (match_operand:HI 3 "nonimmediate_operand" "")))] "TARGET_CMOVE" " *************** *** 7279,7422 **** (define_insn "movsicc_1" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,&r,rm") (if_then_else:SI (match_operator 1 "comparison_operator" ! [(cc0) (const_int 0)]) ! (match_operand:SI 2 "general_operand" "rm,0,rm,g") ! (match_operand:SI 3 "general_operand" "0,rm,rm,g"))) ! (clobber (match_scratch:SI 4 "X,X,X,=&r"))] "TARGET_CMOVE" "* { ! if (which_alternative == 0) { /* r <- cond ? arg : r */ output_asm_insn (AS2 (cmov%C1,%2,%0), operands); ! } ! else if (which_alternative == 1) ! { /* r <- cond ? r : arg */ output_asm_insn (AS2 (cmov%c1,%3,%0), operands); ! } ! else if (which_alternative == 2) ! { /* r <- cond ? arg1 : arg2 */ output_asm_insn (AS2 (cmov%C1,%2,%0), operands); output_asm_insn (AS2 (cmov%c1,%3,%0), operands); } - else if (which_alternative == 3) - { - /* r <- cond ? arg1 : arg2 */ - rtx xops[3]; - xops[0] = gen_label_rtx (); - xops[1] = gen_label_rtx (); - xops[2] = operands[1]; - - output_asm_insn (\"j%c2 %l0\", xops); - if (! rtx_equal_p (operands[0], operands[2])) - if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[2]) == MEM) - { - output_asm_insn (AS2 (mov%z2,%2,%4), operands); - output_asm_insn (AS2 (mov%z2,%4,%0), operands); - } - else - output_asm_insn (AS2 (mov%z0,%2,%0), operands); - output_asm_insn (\"jmp %l1\", xops); - ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", CODE_LABEL_NUMBER (xops[0])); - if (! rtx_equal_p (operands[0], operands[3])) - { - if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[3]) == MEM) - { - output_asm_insn (AS2 (mov%z2,%3,%4), operands); - output_asm_insn (AS2 (mov%z2,%4,%0), operands); - } - else - output_asm_insn (AS2 (mov%z0,%3,%0), operands); - } - ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", CODE_LABEL_NUMBER (xops[1])); - } RET; }") (define_insn "movhicc_1" ! [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,&r,rm") (if_then_else:HI (match_operator 1 "comparison_operator" ! [(cc0) (const_int 0)]) ! (match_operand:HI 2 "general_operand" "rm,0,rm,g") ! (match_operand:HI 3 "general_operand" "0,rm,rm,g"))) ! (clobber (match_scratch:SI 4 "X,X,X,=&r"))] "TARGET_CMOVE" "* { ! if (which_alternative == 0) { /* r <- cond ? arg : r */ output_asm_insn (AS2 (cmov%C1,%2,%0), operands); ! } ! else if (which_alternative == 1) ! { /* r <- cond ? r : arg */ output_asm_insn (AS2 (cmov%c1,%3,%0), operands); ! } ! else if (which_alternative == 2) ! { /* r <- cond ? arg1 : arg2 */ output_asm_insn (AS2 (cmov%C1,%2,%0), operands); output_asm_insn (AS2 (cmov%c1,%3,%0), operands); } - else if (which_alternative == 3) - { - /* r <- cond ? arg1 : arg2 */ - rtx xops[3]; - xops[0] = gen_label_rtx (); - xops[1] = gen_label_rtx (); - xops[2] = operands[1]; - - output_asm_insn (\"j%c2 %l0\", xops); - if (! rtx_equal_p (operands[0], operands[2])) - if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[2]) == MEM) - { - output_asm_insn (AS2 (mov%z2,%2,%4), operands); - output_asm_insn (AS2 (mov%z2,%4,%0), operands); - } - else - output_asm_insn (AS2 (mov%z0,%2,%0), operands); - output_asm_insn (\"jmp %l1\", xops); - ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", CODE_LABEL_NUMBER (xops[0])); - if (! rtx_equal_p (operands[0], operands[3])) - { - if (GET_CODE (operands[0]) == MEM && GET_CODE (operands[3]) == MEM) - { - output_asm_insn (AS2 (mov%z2,%3,%4), operands); - output_asm_insn (AS2 (mov%z2,%4,%0), operands); - } - else - output_asm_insn (AS2 (mov%z0,%3,%0), operands); - } - ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", CODE_LABEL_NUMBER (xops[1])); - } RET; }") (define_expand "movsfcc" [(match_dup 4) ! (set (match_operand 0 "general_operand" "") (if_then_else:SF (match_operand 1 "comparison_operator" "") ! (match_operand:SF 2 "general_operand" "") ! (match_operand:SF 3 "general_operand" "")))] ! "TARGET_CMOVE" " { - int i; - - for (i = 2; i <= 3; i++) - { - if ((reload_in_progress | reload_completed) == 0 - && CONSTANT_P (operands[i])) - { - operands[i] = force_const_mem (SFmode, operands[i]); - } - } operands[4] = i386_compare_gen (i386_compare_op0, i386_compare_op1); }") --- 7277,7354 ---- (define_insn "movsicc_1" ! [(set (match_operand:SI 0 "nonimmediate_operand" "=r,r,&r") (if_then_else:SI (match_operator 1 "comparison_operator" ! [(cc0) (const_int 0)]) ! (match_operand:SI 2 "nonimmediate_operand" "rm,0,rm") ! (match_operand:SI 3 "nonimmediate_operand" "0,rm,rm")))] "TARGET_CMOVE" "* { ! switch (which_alternative) { + case 0: /* r <- cond ? arg : r */ output_asm_insn (AS2 (cmov%C1,%2,%0), operands); ! break; ! ! case 1: /* r <- cond ? r : arg */ output_asm_insn (AS2 (cmov%c1,%3,%0), operands); ! break; ! ! case 2: /* r <- cond ? arg1 : arg2 */ output_asm_insn (AS2 (cmov%C1,%2,%0), operands); output_asm_insn (AS2 (cmov%c1,%3,%0), operands); + break; } RET; }") (define_insn "movhicc_1" ! [(set (match_operand:HI 0 "nonimmediate_operand" "=r,r,&r") (if_then_else:HI (match_operator 1 "comparison_operator" ! [(cc0) (const_int 0)]) ! (match_operand:HI 2 "nonimmediate_operand" "rm,0,rm") ! (match_operand:HI 3 "nonimmediate_operand" "0,rm,rm")))] "TARGET_CMOVE" "* { ! switch (which_alternative) { + case 0: /* r <- cond ? arg : r */ output_asm_insn (AS2 (cmov%C1,%2,%0), operands); ! break; ! ! case 1: /* r <- cond ? r : arg */ output_asm_insn (AS2 (cmov%c1,%3,%0), operands); ! break; ! ! case 2: /* r <- cond ? arg1 : arg2 */ output_asm_insn (AS2 (cmov%C1,%2,%0), operands); output_asm_insn (AS2 (cmov%c1,%3,%0), operands); + break; } RET; }") + ;; We need to disable the FP forms of these since they do not support + ;; memory as written, but no input reloads are permitted for insns + ;; that use cc0. Also, movxfcc is not present. + (define_expand "movsfcc" [(match_dup 4) ! (set (match_operand 0 "register_operand" "") (if_then_else:SF (match_operand 1 "comparison_operator" "") ! (match_operand:SF 2 "register_operand" "") ! (match_operand:SF 3 "register_operand" "")))] ! "0 && TARGET_CMOVE" " { operands[4] = i386_compare_gen (i386_compare_op0, i386_compare_op1); }") *************** *** 7426,7444 **** (set (match_operand 0 "register_operand" "t") (if_then_else:DF (match_operand 1 "comparison_operator" "") ! (match_operand:DF 2 "general_operand" "") ! (match_operand:DF 3 "general_operand" "")))] ! "TARGET_CMOVE" " { - int i; - - for (i = 2; i <= 3; i++) - { - if ((reload_in_progress | reload_completed) == 0 - && CONSTANT_P (operands[i])) - { - operands[i] = force_const_mem (DFmode, operands[i]); - } - } operands[4] = i386_compare_gen (i386_compare_op0, i386_compare_op1); }") --- 7358,7366 ---- (set (match_operand 0 "register_operand" "t") (if_then_else:DF (match_operand 1 "comparison_operator" "") ! (match_operand:DF 2 "register_operand" "") ! (match_operand:DF 3 "register_operand" "")))] ! "0 && TARGET_CMOVE" " { operands[4] = i386_compare_gen (i386_compare_op0, i386_compare_op1); }") *************** *** 7446,7634 **** (define_expand "movxfcc" [(match_dup 4) ! (set (match_operand 0 "register_operand" "t") (if_then_else:XF (match_operand 1 "comparison_operator" "") ! (match_operand:XF 2 "general_operand" "") ! (match_operand:XF 3 "general_operand" "")))] ! "TARGET_CMOVE" " { - int i; - - for (i = 2; i <= 3; i++) - { - if ((reload_in_progress | reload_completed) == 0 - && CONSTANT_P (operands[i])) - { - operands[i] = force_const_mem (XFmode, operands[i]); - } - } operands[4] = i386_compare_gen (i386_compare_op0, i386_compare_op1); }") (define_insn "movsfcc_1" ! [(set (match_operand:SF 0 "general_operand" "=f,=f,=f,=f") (if_then_else:SF (match_operator 1 "comparison_operator" ! [(cc0) (const_int 0)]) ! (match_operand:SF 2 "general_operand" "0,f,f,fFm") ! (match_operand:SF 3 "general_operand" "f,0,f,fFm")))] "TARGET_CMOVE" "* { ! if (which_alternative == 0) { /* r <- cond ? arg : r */ output_asm_insn (AS2 (fcmov%f1,%3,%0), operands); ! } ! else if (which_alternative == 1) ! { /* r <- cond ? r : arg */ output_asm_insn (AS2 (fcmov%F1,%2,%0), operands); ! } ! else if (which_alternative == 2) ! { /* r <- cond ? r : arg */ output_asm_insn (AS2 (fcmov%F1,%2,%0), operands); output_asm_insn (AS2 (fcmov%f1,%3,%0), operands); } - else if (which_alternative == 3) - { - /* r <- cond ? arg1 : arg2 */ - rtx xops[3]; - xops[0] = gen_label_rtx (); - xops[1] = gen_label_rtx (); - xops[2] = operands[1]; - - output_asm_insn (\"j%f2 %l0\", xops); - if (STACK_REG_P (operands[2]) || GET_CODE (operands[2]) == MEM) - output_asm_insn (AS1 (fld%z2,%y2), operands); - else - { - operands[2] = XEXP (operands[2], 0); - output_asm_insn (AS1 (fld%z2,%y2), operands); - } - output_asm_insn (\"jmp %l1\", xops); - ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", CODE_LABEL_NUMBER (xops[0])); - if (STACK_REG_P (operands[3]) || GET_CODE (operands[0]) == MEM) - output_asm_insn (AS1 (fld%z3,%y3), operands); - else - { - operands[3] = XEXP (operands[3], 0); - output_asm_insn (AS1 (fld%z3,%y3), operands); - } - ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", CODE_LABEL_NUMBER (xops[1])); - } RET; }") (define_insn "movdfcc_1" ! [(set (match_operand:DF 0 "general_operand" "=f,=f,=f,=f") (if_then_else:DF (match_operator 1 "comparison_operator" ! [(cc0) (const_int 0)]) ! (match_operand:DF 2 "general_operand" "0,f,f,fFm") ! (match_operand:DF 3 "general_operand" "f,0,f,fFm")))] "TARGET_CMOVE" "* { ! if (which_alternative == 0) { /* r <- cond ? arg : r */ output_asm_insn (AS2 (fcmov%f1,%3,%0), operands); ! } ! else if (which_alternative == 1) ! { ! /* r <- cond ? r : arg */ ! output_asm_insn (AS2 (fcmov%F1,%2,%0), operands); ! } ! else if (which_alternative == 2) ! { ! /* r <- cond ? r : arg */ ! output_asm_insn (AS2 (fcmov%F1,%2,%0), operands); ! output_asm_insn (AS2 (fcmov%f1,%3,%0), operands); ! } ! else if (which_alternative == 3) ! { ! /* r <- cond ? arg1 : arg2 */ ! rtx xops[3]; ! ! xops[0] = gen_label_rtx (); ! xops[1] = gen_label_rtx (); ! xops[2] = operands[1]; ! ! output_asm_insn (\"j%f2 %l0\", xops); ! if (STACK_REG_P (operands[2]) || GET_CODE (operands[2]) == MEM) ! output_asm_insn (AS1 (fld%z2,%y2), operands); ! else ! { ! operands[2] = XEXP (operands[2], 0); ! output_asm_insn (AS1 (fld%z2,%y2), operands); ! } ! output_asm_insn (\"jmp %l1\", xops); ! ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", CODE_LABEL_NUMBER (xops[0])); ! if (STACK_REG_P (operands[3]) || GET_CODE (operands[0]) == MEM) ! output_asm_insn (AS1 (fld%z3,%y3), operands); ! else ! { ! operands[3] = XEXP (operands[3], 0); ! output_asm_insn (AS1 (fld%z3,%y3), operands); ! } ! ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", CODE_LABEL_NUMBER (xops[1])); ! } ! RET; ! }") ! (define_insn "movxfcc_1" ! [(set (match_operand:XF 0 "register_operand" "=f,=f,=f,=f") ! (if_then_else:XF (match_operator 1 "comparison_operator" ! [(cc0) (const_int 0)]) ! (match_operand:XF 2 "register_operand" "0,f,f,fFm") ! (match_operand:XF 3 "register_operand" "f,0,f,fFm")))] ! "TARGET_CMOVE" ! "* ! { ! if (which_alternative == 0) ! { ! /* r <- cond ? arg : r */ ! output_asm_insn (AS2 (fcmov%f1,%3,%0), operands); ! } ! else if (which_alternative == 1) ! { /* r <- cond ? r : arg */ output_asm_insn (AS2 (fcmov%F1,%2,%0), operands); ! } ! else if (which_alternative == 2) ! { /* r <- cond ? r : arg */ output_asm_insn (AS2 (fcmov%F1,%2,%0), operands); output_asm_insn (AS2 (fcmov%f1,%3,%0), operands); } - else if (which_alternative == 3) - { - /* r <- cond ? arg1 : arg2 */ - rtx xops[3]; - xops[0] = gen_label_rtx (); - xops[1] = gen_label_rtx (); - xops[2] = operands[1]; - - output_asm_insn (\"j%f2 %l0\", xops); - if (STACK_REG_P (operands[2]) || GET_CODE (operands[2]) == MEM) - output_asm_insn (AS1 (fld%z2,%y2), operands); - else - { - operands[2] = XEXP (operands[2], 0); - output_asm_insn (AS1 (fld%z2,%y2), operands); - } - output_asm_insn (\"jmp %l1\", xops); - ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", CODE_LABEL_NUMBER (xops[0])); - if (STACK_REG_P (operands[3]) || GET_CODE (operands[0]) == MEM) - output_asm_insn (AS1 (fld%z3,%y3), operands); - else - { - operands[3] = XEXP (operands[3], 0); - output_asm_insn (AS1 (fld%z3,%y3), operands); - } - ASM_OUTPUT_INTERNAL_LABEL (asm_out_file, \"L\", CODE_LABEL_NUMBER (xops[1])); - } RET; }") --- 7368,7440 ---- (define_expand "movxfcc" [(match_dup 4) ! (set (match_operand 0 "register_operand" "") (if_then_else:XF (match_operand 1 "comparison_operator" "") ! (match_operand:XF 2 "register_operand" "") ! (match_operand:XF 3 "register_operand" "")))] ! "0 && TARGET_CMOVE" " { operands[4] = i386_compare_gen (i386_compare_op0, i386_compare_op1); }") (define_insn "movsfcc_1" ! [(set (match_operand:SF 0 "general_operand" "=f,f,&f") (if_then_else:SF (match_operator 1 "comparison_operator" ! [(cc0) (const_int 0)]) ! (match_operand:SF 2 "register_operand" "0,f,f") ! (match_operand:SF 3 "register_operand" "f,0,f")))] "TARGET_CMOVE" "* { ! switch (which_alternative) { + case 0: /* r <- cond ? arg : r */ output_asm_insn (AS2 (fcmov%f1,%3,%0), operands); ! break; ! ! case 1: /* r <- cond ? r : arg */ output_asm_insn (AS2 (fcmov%F1,%2,%0), operands); ! break; ! ! case 2: /* r <- cond ? r : arg */ output_asm_insn (AS2 (fcmov%F1,%2,%0), operands); output_asm_insn (AS2 (fcmov%f1,%3,%0), operands); + break; } RET; }") (define_insn "movdfcc_1" ! [(set (match_operand:DF 0 "general_operand" "=f,f,&f") (if_then_else:DF (match_operator 1 "comparison_operator" ! [(cc0) (const_int 0)]) ! (match_operand:DF 2 "register_operand" "0,f,f") ! (match_operand:DF 3 "register_operand" "f,0,f")))] "TARGET_CMOVE" "* { ! switch (which_alternative) { + case 0: /* r <- cond ? arg : r */ output_asm_insn (AS2 (fcmov%f1,%3,%0), operands); ! break; ! case 1: /* r <- cond ? r : arg */ output_asm_insn (AS2 (fcmov%F1,%2,%0), operands); ! break; ! ! case 2: /* r <- cond ? r : arg */ output_asm_insn (AS2 (fcmov%F1,%2,%0), operands); output_asm_insn (AS2 (fcmov%f1,%3,%0), operands); + break; } RET; }") diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/i386/mingw32.h gcc-2.8.1/config/i386/mingw32.h *** gcc-2.8.0/config/i386/mingw32.h Mon Dec 1 16:50:25 1997 --- gcc-2.8.1/config/i386/mingw32.h Sat Feb 7 07:32:28 1998 *************** *** 3,7 **** as distinct from winnt.h, which is used to build GCC for use with a windows style library and tool set and uses the Microsoft tools. ! Copyright (C) 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 3,7 ---- as distinct from winnt.h, which is used to build GCC for use with a windows style library and tool set and uses the Microsoft tools. ! Copyright (C) 1997, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 48,52 **** /* Include in the mingw32 libraries with libgcc */ #undef LIBGCC_SPEC ! #define LIBGCC_SPEC "-lmingw32 -lgcc -lmoldname -lcrtdll" /* Specify a different entry point when linking a DLL */ --- 48,52 ---- /* Include in the mingw32 libraries with libgcc */ #undef LIBGCC_SPEC ! #define LIBGCC_SPEC "-lmingw32 -lgcc -lmoldname -lmsvcrt" /* Specify a different entry point when linking a DLL */ *************** *** 56,62 **** #undef STARTFILE_SPEC ! #define STARTFILE_SPEC "%{mdll:dllcrt1%O%s} %{!mdll:crt1%O%s}" ! #define MATH_LIBRARY "-lcrtdll" /* Output STRING, a string representing a filename, to FILE. We canonicalize --- 56,62 ---- #undef STARTFILE_SPEC ! #define STARTFILE_SPEC "%{mdll:dllcrt2%O%s} %{!mdll:crt2%O%s}" ! #define MATH_LIBRARY "-lmsvcrt" /* Output STRING, a string representing a filename, to FILE. We canonicalize diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/i386/sol2-c1.asm gcc-2.8.1/config/i386/sol2-c1.asm *** gcc-2.8.0/config/i386/sol2-c1.asm Thu Jun 15 09:51:23 1995 --- gcc-2.8.1/config/i386/sol2-c1.asm Fri Feb 6 11:00:55 1998 *************** *** 1,5 **** ! crt1.s for Solaris 2, x86 ! ! Copyright (C) 1993 Free Software Foundation, Inc. ! Written By Fred Fish, Nov 1992 ! --- 1,5 ---- ! crt1.s for Solaris 2, x86 ! ! Copyright (C) 1993, 1998 Free Software Foundation, Inc. ! Written By Fred Fish, Nov 1992 ! *************** *** 150,154 **** ! in case we link in some objects that have been compiled for profiling. ! .globl _mcount _mcount: ret --- 150,154 ---- ! in case we link in some objects that have been compiled for profiling. ! .weak _mcount _mcount: ret diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/i386/sol2-gc1.asm gcc-2.8.1/config/i386/sol2-gc1.asm *** gcc-2.8.0/config/i386/sol2-gc1.asm Fri Aug 30 14:14:24 1996 --- gcc-2.8.1/config/i386/sol2-gc1.asm Tue Feb 3 19:44:51 1998 *************** *** 42,46 **** ! implementations. This file is the first thing linked into any executable. ! ! This is a modified crt1.s by J.W.Hawtin 15/8/96, ! to allow program profiling, by calling monstartup on entry and _mcleanup ! on exit --- 42,46 ---- ! implementations. This file is the first thing linked into any executable. ! ! This is a modified crt1.s by J.W.Hawtin 15/8/96, ! to allow program profiling, by calling monstartup on entry and _mcleanup ! on exit diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/i386/sol2.h gcc-2.8.1/config/i386/sol2.h *** gcc-2.8.0/config/i386/sol2.h Tue Dec 23 22:59:12 1997 --- gcc-2.8.1/config/i386/sol2.h Tue Feb 3 19:45:28 1998 *************** *** 1,4 **** /* Target definitions for GNU compiler for Intel 80386 running Solaris 2 ! Copyright (C) 1993, 1995, 1996, 1997 Free Software Foundation, Inc. Contributed by Fred Fish (fnf@cygnus.com). --- 1,4 ---- /* Target definitions for GNU compiler for Intel 80386 running Solaris 2 ! Copyright (C) 1993, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. Contributed by Fred Fish (fnf@cygnus.com). *************** *** 54,58 **** %{!symbolic: \ %{pg:gcrt1.o%s}%{!pg:%{p:mcrt1.o%s}%{!p:crt1.o%s}}}}\ ! %{pg:gmon.o%s}%{!pg:crti.o%s} \ %{ansi:values-Xc.o%s} \ %{!ansi: \ --- 54,58 ---- %{!symbolic: \ %{pg:gcrt1.o%s}%{!pg:%{p:mcrt1.o%s}%{!p:crt1.o%s}}}}\ ! %{pg:gmon.o%s} crti.o%s \ %{ansi:values-Xc.o%s} \ %{!ansi: \ *************** *** 73,82 **** %{R*} \ %{compat-bsd: \ ! %{!YP,*:%{p:-Y P,/usr/ucblib:/usr/ccs/lib/libp:/usr/lib/libp:/usr/ccs/lib:/usr/lib} \ ! %{!p:-Y P,/usr/ucblib:/usr/ccs/lib:/usr/lib}} \ -R /usr/ucblib} \ %{!compat-bsd: \ ! %{!YP,*:%{p:-Y P,/usr/ccs/lib/libp:/usr/lib/libp:/usr/ccs/lib:/usr/lib} \ ! %{!p:-Y P,/usr/ccs/lib:/usr/lib}}} \ %{Qy:} %{!Qn:-Qy}" --- 73,84 ---- %{R*} \ %{compat-bsd: \ ! %{!YP,*:%{pg:-Y P,/usr/ucblib:/usr/ccs/lib/libp:/usr/lib/libp:/usr/ccs/lib:/usr/lib} \ ! %{!pg:%{p:-Y P,/usr/ucblib:/usr/ccs/lib/libp:/usr/lib/libp:/usr/ccs/lib:/usr/lib} \ ! %{!p:-Y P,/usr/ucblib:/usr/ccs/lib:/usr/lib}}} \ -R /usr/ucblib} \ %{!compat-bsd: \ ! %{!YP,*:%{pg:-Y P,/usr/ccs/lib/libp:/usr/lib/libp:/usr/ccs/lib:/usr/lib} \ ! %{!pg:%{p:-Y P,/usr/ccs/lib/libp:/usr/lib/libp:/usr/ccs/lib:/usr/lib} \ ! %{!p:-Y P,/usr/ccs/lib:/usr/lib}}}} \ %{Qy:} %{!Qn:-Qy}" diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/i386/sol2dbg.h gcc-2.8.1/config/i386/sol2dbg.h *** gcc-2.8.0/config/i386/sol2dbg.h Mon Jan 1 21:12:33 1996 --- gcc-2.8.1/config/i386/sol2dbg.h Fri Feb 6 11:00:09 1998 *************** *** 15,16 **** --- 15,27 ---- #undef DWARF_DEBUGGING_INFO #endif + + /* + Changed from config/svr4.h in the following ways: + + - Added "%{V}". + - Modified "{%v:-V}" to take into account "%{V}". + - Added "-s" so that stabs are saved in the final executable. */ + + #undef ASM_SPEC + #define ASM_SPEC \ + "%{V} %{v:%{!V:-V}} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*} -s" diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/i386/x-osfrose gcc-2.8.1/config/i386/x-osfrose *** gcc-2.8.0/config/i386/x-osfrose Mon Feb 12 20:37:34 1996 --- gcc-2.8.1/config/i386/x-osfrose Mon Feb 2 16:40:57 1998 *************** *** 18,22 **** CCLIBFLAGS = -O -DNO_HALF_PIC GCC_CFLAGS = $(INTERNAL_CFLAGS) $(X_CFLAGS) $(T_CFLAGS) $(CFLAGS) -B./ -DPOSIX -DNO_HALF_PIC - INSTALL = installbsd -c LDFLAGS = MSTATS = # -mstats --- 18,21 ---- diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/i386/x-sco5 gcc-2.8.1/config/i386/x-sco5 *** gcc-2.8.0/config/i386/x-sco5 Mon Dec 22 18:51:33 1997 --- gcc-2.8.1/config/i386/x-sco5 Wed Jan 14 20:09:11 1998 *************** *** 1,5 **** RANLIB = : RANLIB_TEST = false ! CC = cc OLDCC = cc CCLIBFLAGS = --- 1,5 ---- RANLIB = : RANLIB_TEST = false ! CC = cc OLDCC = cc CCLIBFLAGS = diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/i386/xm-go32.h gcc-2.8.1/config/i386/xm-go32.h *** gcc-2.8.0/config/i386/xm-go32.h Wed Jan 17 18:53:10 1996 --- gcc-2.8.1/config/i386/xm-go32.h Thu Feb 12 07:15:12 1998 *************** *** 1,4 **** /* Configuration for GNU C-compiler for Intel 80386 running GO32. ! Copyright (C) 1988, 1996 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* Configuration for GNU C-compiler for Intel 80386 running GO32. ! Copyright (C) 1988, 1996, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 27,28 **** --- 27,30 ---- /* Use semicolons to separate elements of a path. */ #define PATH_SEPARATOR ';' + + #define EXECUTABLE_SUFFIX ".exe" diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/i386/xm-mingw32.h gcc-2.8.1/config/i386/xm-mingw32.h *** gcc-2.8.0/config/i386/xm-mingw32.h Wed Nov 26 13:28:09 1997 --- gcc-2.8.1/config/i386/xm-mingw32.h Fri Feb 6 20:27:17 1998 *************** *** 1,5 **** /* Configuration for GNU C-compiler for hosting on Windows32. using GNU tools and the Windows32 API Library. ! Copyright (C) 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,5 ---- /* Configuration for GNU C-compiler for hosting on Windows32. using GNU tools and the Windows32 API Library. ! Copyright (C) 1997, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 35,39 **** #define NO_SYS_SIGLIST 1 - #define link(a,b) -1 #define environ _environ --- 35,38 ---- diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/i386/xm-os2.h gcc-2.8.1/config/i386/xm-os2.h *** gcc-2.8.0/config/i386/xm-os2.h Sat Nov 22 07:06:50 1997 --- gcc-2.8.1/config/i386/xm-os2.h Fri Feb 6 20:32:25 1998 *************** *** 1,5 **** /* Configuration for GNU compiler for an Intel i386 or later processor running OS/2 2.x. ! Copyright (C) 1993, 1994, 1995, 1997 Free Software Foundation, Inc. Contributed by Samuel Figueroa (figueroa@apple.com) --- 1,5 ---- /* Configuration for GNU compiler for an Intel i386 or later processor running OS/2 2.x. ! Copyright (C) 1993, 1994, 1995, 1997, 1998 Free Software Foundation, Inc. Contributed by Samuel Figueroa (figueroa@apple.com) *************** *** 34,40 **** --- 34,50 ---- #define mktemp tmpnam #else + #ifdef __EMX__ + #define EMX + #define USG + #define BSTRING + #define HAVE_PUTENV + #define HAVE_VPRINTF + #define HAVE_STRERROR + #define strcasecmp stricmp + #else #define ____386BSD____ int spawnv (int modeflag, char *path, char *argv[]); int spawnvp (int modeflag, char *path, char *argv[]); + #endif /* __EMX__ */ #endif /* __IBMC__ */ *************** *** 47,51 **** --- 57,69 ---- #define EXECUTABLE_SUFFIX ".exe" + + /* The EMX compiler uses regular .o files */ + #ifndef __EMX__ #define OBJECT_SUFFIX ".obj" + #endif + + /* This is required to make temporary file names unique on file + systems which severely restrict the length of file names. */ + #define MKTEMP_EACH_FILE #include "i386/xm-i386.h" diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/i860/fx2800.h gcc-2.8.1/config/i860/fx2800.h *** gcc-2.8.0/config/i860/fx2800.h Sat Sep 21 06:32:10 1996 --- gcc-2.8.1/config/i860/fx2800.h Sat Feb 28 15:58:34 1998 *************** *** 1,5 **** /* Target definitions for GNU compiler for Alliant FX/2800 running Concentrix 2.2 ! Copyright (C) 1991, 1996 Free Software Foundation, Inc. Contributed by Howard Chu (hyc@hanauma.jpl.nasa.gov). --- 1,5 ---- /* Target definitions for GNU compiler for Alliant FX/2800 running Concentrix 2.2 ! Copyright (C) 1991, 1996, 1998 Free Software Foundation, Inc. Contributed by Howard Chu (hyc@hanauma.jpl.nasa.gov). *************** *** 253,257 **** #define DATA_ALIGNMENT(dummy,align) \ ((TREE_PUBLIC (decl) && \ ! (TREE_CODE (TREE_TYPE (decl))==POINTER_TYPE)) ? 64:align) #undef FUNCTION_PROFILER --- 253,257 ---- #define DATA_ALIGNMENT(dummy,align) \ ((TREE_PUBLIC (decl) && \ ! (POINTER_TYPE_P (TREE_TYPE (decl)))) ? 64: align) #undef FUNCTION_PROFILER diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/i860/i860.c gcc-2.8.1/config/i860/i860.c *** gcc-2.8.0/config/i860/i860.c Fri Aug 22 13:32:03 1997 --- gcc-2.8.1/config/i860/i860.c Fri Feb 6 11:46:05 1998 *************** *** 1,4 **** /* Subroutines for insn-output.c for Intel 860 ! Copyright (C) 1989, 1991, 1997 Free Software Foundation, Inc. Derived from sparc.c. --- 1,4 ---- /* Subroutines for insn-output.c for Intel 860 ! Copyright (C) 1989, 1991, 1997, 1998 Free Software Foundation, Inc. Derived from sparc.c. *************** *** 1436,1440 **** We must do this after outputting the branch insn, since operands may just be a pointer to `recog_operand'. */ ! INSN_CODE (delay_insn) = insn_code_number = recog (pat, delay_insn); if (insn_code_number == -1) abort (); --- 1436,1441 ---- We must do this after outputting the branch insn, since operands may just be a pointer to `recog_operand'. */ ! INSN_CODE (delay_insn) = insn_code_number ! = recog (pat, delay_insn, NULL_PTR); if (insn_code_number == -1) abort (); *************** *** 1490,1494 **** #ifdef REGISTER_CONSTRAINTS ! if (! constrain_operands (insn_code_number)) abort (); #endif --- 1491,1495 ---- #ifdef REGISTER_CONSTRAINTS ! if (! constrain_operands (insn_code_number, 1)) abort (); #endif diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/i960/i960.c gcc-2.8.1/config/i960/i960.c *** gcc-2.8.0/config/i960/i960.c Sun Dec 28 08:16:25 1997 --- gcc-2.8.1/config/i960/i960.c Wed Feb 18 14:42:21 1998 *************** *** 1,4 **** /* Subroutines used for code generation on intel 80960. ! Copyright (C) 1992, 1995, 1996, 1997 Free Software Foundation, Inc. Contributed by Steven McGeady, Intel Corp. Additional Work by Glenn Colon-Bonet, Jonathan Shapiro, Andy Wilson --- 1,4 ---- /* Subroutines used for code generation on intel 80960. ! Copyright (C) 1992, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. Contributed by Steven McGeady, Intel Corp. Additional Work by Glenn Colon-Bonet, Jonathan Shapiro, Andy Wilson *************** *** 590,595 **** /* ??? We don't always need the scratch, but that would complicate things. Maybe later. */ if (GET_MODE_SIZE (mode) > UNITS_PER_WORD ! && GET_CODE (operands[0]) == MEM && GET_CODE (operands[1]) == REG && REGNO (operands[1]) < FIRST_PSEUDO_REGISTER --- 590,600 ---- /* ??? We don't always need the scratch, but that would complicate things. Maybe later. */ + /* ??? We must also handle stores to pseudos here, because the pseudo may be + replaced with a MEM later. This would be cleaner if we didn't have + a separate pattern for unaligned DImode/TImode stores. */ if (GET_MODE_SIZE (mode) > UNITS_PER_WORD ! && (GET_CODE (operands[0]) == MEM ! || (GET_CODE (operands[0]) == REG ! && REGNO (operands[0]) >= FIRST_PSEUDO_REGISTER)) && GET_CODE (operands[1]) == REG && REGNO (operands[1]) < FIRST_PSEUDO_REGISTER diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/i960/i960.md gcc-2.8.1/config/i960/i960.md *** gcc-2.8.0/config/i960/i960.md Sat Aug 3 12:00:00 1996 --- gcc-2.8.1/config/i960/i960.md Wed Feb 18 14:42:42 1998 *************** *** 1,4 **** ;;- Machine description for Intel 80960 chip for GNU C compiler ! ;; Copyright (C) 1992, 1995 Free Software Foundation, Inc. ;; Contributed by Steven McGeady, Intel Corp. ;; Additional work by Glenn Colon-Bonet, Jonathan Shapiro, Andy Wilson --- 1,4 ---- ;;- Machine description for Intel 80960 chip for GNU C compiler ! ;; Copyright (C) 1992, 1995, 1998 Free Software Foundation, Inc. ;; Contributed by Steven McGeady, Intel Corp. ;; Additional work by Glenn Colon-Bonet, Jonathan Shapiro, Andy Wilson *************** *** 868,882 **** (define_insn "*store_unaligned_di_reg" ! [(set (match_operand:DI 0 "memory_operand" "=m") ! (match_operand:DI 1 "register_operand" "d")) ! (clobber (match_scratch:SI 2 "=&d"))] "" "* { operands[3] = gen_rtx (MEM, word_mode, operands[2]); operands[4] = adj_offsettable_operand (operands[3], UNITS_PER_WORD); return \"lda %0,%2\;st %1,%3\;st %D1,%4\"; }" ! [(set_attr "type" "store")]) (define_expand "movti" --- 868,885 ---- (define_insn "*store_unaligned_di_reg" ! [(set (match_operand:DI 0 "general_operand" "=d,m") ! (match_operand:DI 1 "register_operand" "d,d")) ! (clobber (match_scratch:SI 2 "=X,&d"))] "" "* { + if (which_alternative == 0) + return i960_output_move_double (operands[0], operands[1]); + operands[3] = gen_rtx (MEM, word_mode, operands[2]); operands[4] = adj_offsettable_operand (operands[3], UNITS_PER_WORD); return \"lda %0,%2\;st %1,%3\;st %D1,%4\"; }" ! [(set_attr "type" "move,store")]) (define_expand "movti" *************** *** 947,956 **** (define_insn "*store_unaligned_ti_reg" ! [(set (match_operand:TI 0 "memory_operand" "=m") ! (match_operand:TI 1 "register_operand" "d")) ! (clobber (match_scratch:SI 2 "=&d"))] "" "* { operands[3] = gen_rtx (MEM, word_mode, operands[2]); operands[4] = adj_offsettable_operand (operands[3], UNITS_PER_WORD); --- 950,962 ---- (define_insn "*store_unaligned_ti_reg" ! [(set (match_operand:TI 0 "general_operand" "=d,m") ! (match_operand:TI 1 "register_operand" "d,d")) ! (clobber (match_scratch:SI 2 "=X,&d"))] "" "* { + if (which_alternative == 0) + return i960_output_move_quad (operands[0], operands[1]); + operands[3] = gen_rtx (MEM, word_mode, operands[2]); operands[4] = adj_offsettable_operand (operands[3], UNITS_PER_WORD); *************** *** 959,963 **** return \"lda %0,%2\;st %1,%3\;st %D1,%4\;st %E1,%5\;st %F1,%6\"; }" ! [(set_attr "type" "store")]) (define_expand "store_multiple" --- 965,969 ---- return \"lda %0,%2\;st %1,%3\;st %D1,%4\;st %E1,%5\;st %F1,%6\"; }" ! [(set_attr "type" "move,store")]) (define_expand "store_multiple" diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/linux.h gcc-2.8.1/config/linux.h *** gcc-2.8.0/config/linux.h Fri Dec 5 07:08:33 1997 --- gcc-2.8.1/config/linux.h Fri Feb 20 08:21:56 1998 *************** *** 1,6 **** /* Definitions for Linux-based GNU systems with ELF format ! Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. Contributed by Eric Youngdale. ! Modified for stabs-in-ELF by H.J. Lu. This file is part of GNU CC. --- 1,6 ---- /* Definitions for Linux-based GNU systems with ELF format ! Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. Contributed by Eric Youngdale. ! Modified for stabs-in-ELF by H.J. Lu (hjl@lucon.org). This file is part of GNU CC. *************** *** 103,107 **** #else #define LIB_SPEC \ ! "%{!shared: %{mieee-fp:-lieee} %{pthread:-lpthread} \ %{profile:-lc_p} %{!profile: -lc}}" #endif --- 103,108 ---- #else #define LIB_SPEC \ ! "%{shared: -lc} \ ! %{!shared: %{mieee-fp:-lieee} %{pthread:-lpthread} \ %{profile:-lc_p} %{!profile: -lc}}" #endif diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/m68k/a-ux.h gcc-2.8.1/config/m68k/a-ux.h *** gcc-2.8.0/config/m68k/a-ux.h Tue Sep 24 17:39:35 1996 --- gcc-2.8.1/config/m68k/a-ux.h Sat Feb 28 15:58:36 1998 *************** *** 1,4 **** /* Definitions for Motorola 680x0 running A/UX ! Copyright (C) 1996 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* Definitions for Motorola 680x0 running A/UX ! Copyright (C) 1996, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 115,122 **** #undef FUNCTION_VALUE ! #define FUNCTION_VALUE(VALTYPE, FUNC) \ ! (TREE_CODE (VALTYPE) == REAL_TYPE && TARGET_68881 \ ! ? gen_rtx (REG, TYPE_MODE (VALTYPE), 16) \ ! : (TREE_CODE (VALTYPE) == POINTER_TYPE \ ? gen_rtx (REG, TYPE_MODE (VALTYPE), 8) \ : gen_rtx (REG, TYPE_MODE (VALTYPE), 0))) --- 115,122 ---- #undef FUNCTION_VALUE ! #define FUNCTION_VALUE(VALTYPE, FUNC) \ ! (TREE_CODE (VALTYPE) == REAL_TYPE && TARGET_68881 \ ! ? gen_rtx (REG, TYPE_MODE (VALTYPE), 16) \ ! : (POINTER_TYPE_P (VALTYPE) \ ? gen_rtx (REG, TYPE_MODE (VALTYPE), 8) \ : gen_rtx (REG, TYPE_MODE (VALTYPE), 0))) diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/m68k/m68k.h gcc-2.8.1/config/m68k/m68k.h *** gcc-2.8.0/config/m68k/m68k.h Fri Dec 26 05:52:28 1997 --- gcc-2.8.1/config/m68k/m68k.h Thu Feb 19 18:23:53 1998 *************** *** 1,4 **** /* Definitions of target machine for GNU compiler. Sun 68000/68020 version. ! Copyright (C) 1987, 88, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* Definitions of target machine for GNU compiler. Sun 68000/68020 version. ! Copyright (C) 1987, 88, 93-97, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 136,142 **** { "c68020", (MASK_68020|MASK_BITFIELD)}, \ { "68000", - (MASK_5200|MASK_68060|MASK_68040|MASK_68040_ONLY \ ! |MASK_68020|MASK_BITFIELD)}, \ { "c68000", - (MASK_5200|MASK_68060|MASK_68040|MASK_68040_ONLY \ ! |MASK_68020|MASK_BITFIELD)}, \ { "bitfield", MASK_BITFIELD}, \ { "nobitfield", - MASK_BITFIELD}, \ --- 136,142 ---- { "c68020", (MASK_68020|MASK_BITFIELD)}, \ { "68000", - (MASK_5200|MASK_68060|MASK_68040|MASK_68040_ONLY \ ! |MASK_68020|MASK_BITFIELD|MASK_68881)}, \ { "c68000", - (MASK_5200|MASK_68060|MASK_68040|MASK_68040_ONLY \ ! |MASK_68020|MASK_BITFIELD|MASK_68881)}, \ { "bitfield", MASK_BITFIELD}, \ { "nobitfield", - MASK_BITFIELD}, \ *************** *** 170,177 **** { "68851", 0}, \ { "no-68851", 0}, \ ! { "68302", - (MASK_5200|MASK_68060|MASK_68040|MASK_68020|MASK_BITFIELD)}, \ ! { "68332", - (MASK_5200|MASK_68060|MASK_68040|MASK_BITFIELD)}, \ { "68332", MASK_68020}, \ ! { "cpu32", - (MASK_5200|MASK_68060|MASK_68040|MASK_BITFIELD)}, \ { "cpu32", MASK_68020}, \ { "align-int", MASK_ALIGN_INT }, \ --- 170,180 ---- { "68851", 0}, \ { "no-68851", 0}, \ ! { "68302", - (MASK_5200|MASK_68060|MASK_68040|MASK_68040_ONLY \ ! |MASK_68020|MASK_BITFIELD|MASK_68881)}, \ ! { "68332", - (MASK_5200|MASK_68060|MASK_68040|MASK_68040_ONLY \ ! |MASK_BITFIELD)}, \ { "68332", MASK_68020}, \ ! { "cpu32", - (MASK_5200|MASK_68060|MASK_68040|MASK_68040_ONLY \ ! |MASK_BITFIELD)}, \ { "cpu32", MASK_68020}, \ { "align-int", MASK_ALIGN_INT }, \ *************** *** 1079,1086 **** #define MACHINE_STATE_SAVE(id) \ { \ ! asm ("subl 20,sp"); \ ! asm ("movml d0/d1/a0/a1,sp@(4)"); \ ! asm ("movew cc,d0"); \ ! asm ("movml d0,sp@"); \ } #else /* !__mcf5200__ */ --- 1082,1089 ---- #define MACHINE_STATE_SAVE(id) \ { \ ! asm ("subl %#20,%/sp" : ); \ ! asm ("movml %/d0/%/d1/%/a0/%/a1,%/sp@(4)" : ); \ ! asm ("movew %/cc,%/d0" : ); \ ! asm ("movml %/d0,%/sp@" : ); \ } #else /* !__mcf5200__ */ *************** *** 1088,1099 **** #define MACHINE_STATE_SAVE(id) \ { \ ! asm ("movew cc,sp@-"); \ ! asm ("moveml d0/d1/a0/a1,sp@-"); \ } #else /* !MACHINE_STATE_m68010_up */ #define MACHINE_STATE_SAVE(id) \ { \ ! asm ("movew sr,sp@-"); \ ! asm ("moveml d0/d1/a0/a1,sp@-"); \ } #endif /* MACHINE_STATE_m68010_up */ --- 1091,1102 ---- #define MACHINE_STATE_SAVE(id) \ { \ ! asm ("movew %/cc,%/sp@-" : ); \ ! asm ("moveml %/d0/%/d1/%/a0/%/a1,%/sp@-" : ); \ } #else /* !MACHINE_STATE_m68010_up */ #define MACHINE_STATE_SAVE(id) \ { \ ! asm ("movew %/sr,%/sp@-" : ); \ ! asm ("moveml %/d0/%/d1/%/a0/%/a1,%/sp@-" : ); \ } #endif /* MACHINE_STATE_m68010_up */ *************** *** 1132,1145 **** #define MACHINE_STATE_RESTORE(id) \ { \ ! asm ("movml sp@,d0"); \ ! asm ("movew d0,cc"); \ ! asm ("movml sp@(4),d0/d1/a0/a1"); \ ! asm ("addl 20,sp"); \ } #else /* !__mcf5200__ */ #define MACHINE_STATE_RESTORE(id) \ { \ ! asm ("moveml sp@+,d0/d1/a0/a1"); \ ! asm ("movew sp@+,cc"); \ } #endif /* __mcf5200__ */ --- 1135,1148 ---- #define MACHINE_STATE_RESTORE(id) \ { \ ! asm ("movml %/sp@,%/d0" : ); \ ! asm ("movew %/d0,%/cc" : ); \ ! asm ("movml %/sp@(4),%/d0/%/d1/%/a0/%/a1" : ); \ ! asm ("addl %#20,%/sp" : ); \ } #else /* !__mcf5200__ */ #define MACHINE_STATE_RESTORE(id) \ { \ ! asm ("moveml %/sp@+,%/d0/%/d1/%/a0/%/a1" : ); \ ! asm ("movew %/sp@+,%/cc" : ); \ } #endif /* __mcf5200__ */ diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/mips/iris5.h gcc-2.8.1/config/mips/iris5.h *** gcc-2.8.0/config/mips/iris5.h Mon Apr 7 17:25:46 1997 --- gcc-2.8.1/config/mips/iris5.h Wed Feb 25 07:24:02 1998 *************** *** 1,4 **** /* Definitions of target machine for GNU compiler. Iris version 5. ! Copyright (C) 1993, 1995, 1996 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* Definitions of target machine for GNU compiler. Iris version 5. ! Copyright (C) 1993, 1995, 1996, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 122,125 **** --- 122,128 ---- #undef SDB_DEBUGGING_INFO #undef MIPS_DEBUGGING_INFO + + /* Likewise, the assembler doesn't handle DWARF2 directives. */ + #define DWARF2_UNWIND_INFO 0 #undef MACHINE_TYPE diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/mips/iris5gas.h gcc-2.8.1/config/mips/iris5gas.h *** gcc-2.8.0/config/mips/iris5gas.h Tue May 31 19:37:27 1994 --- gcc-2.8.1/config/mips/iris5gas.h Wed Feb 25 07:24:04 1998 *************** *** 8,11 **** --- 8,15 ---- #define MIPS_DEBUGGING_INFO + /* GNU as does handle DWARF2 directives. */ + #undef DWARF2_UNWIND_INFO + #define DWARF2_UNWIND_INFO 1 + /* Irix 5 does not have some strange restrictions that Irix 3 had. */ #undef SET_FILE_NUMBER diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/mips/iris6.h gcc-2.8.1/config/mips/iris6.h *** gcc-2.8.0/config/mips/iris6.h Wed Dec 3 08:20:33 1997 --- gcc-2.8.1/config/mips/iris6.h Fri Feb 6 09:13:45 1998 *************** *** 1,4 **** /* Definitions of target machine for GNU compiler. Iris version 6. ! Copyright (C) 1994, 1995, 1996, 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* Definitions of target machine for GNU compiler. Iris version 6. ! Copyright (C) 1994, 1995, 1996, 1997, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 542,545 **** %{!shared: %{!non_shared: %{!call_shared: -call_shared -no_unresolved}}}} \ %{rpath} -init __do_global_ctors -fini __do_global_dtors \ ! %{shared:-hidden_symbol __do_global_ctors,__do_global_dtors,__EH_FRAME_BEGIN__} \ -_SYSTYPE_SVR4 %{mabi=32: -32}%{mabi=n32: -n32}%{mabi=64: -64} %{!mabi*: -n32}" --- 542,545 ---- %{!shared: %{!non_shared: %{!call_shared: -call_shared -no_unresolved}}}} \ %{rpath} -init __do_global_ctors -fini __do_global_dtors \ ! %{shared:-hidden_symbol __do_global_ctors,__do_global_dtors,__EH_FRAME_BEGIN__,__frame_dummy} \ -_SYSTYPE_SVR4 %{mabi=32: -32}%{mabi=n32: -n32}%{mabi=64: -64} %{!mabi*: -n32}" diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/mips/mips.c gcc-2.8.1/config/mips/mips.c *** gcc-2.8.0/config/mips/mips.c Wed Dec 3 08:09:29 1997 --- gcc-2.8.1/config/mips/mips.c Tue Feb 3 13:53:27 1998 *************** *** 1,4 **** /* Subroutines for insn-output.c for MIPS ! Copyright (C) 1989, 90, 91, 93-96, 1997 Free Software Foundation, Inc. Contributed by A. Lichnewsky, lich@inria.inria.fr. Changes by Michael Meissner, meissner@osf.org. --- 1,4 ---- /* Subroutines for insn-output.c for MIPS ! Copyright (C) 1989, 90, 91, 93-97, 1998 Free Software Foundation, Inc. Contributed by A. Lichnewsky, lich@inria.inria.fr. Changes by Michael Meissner, meissner@osf.org. *************** *** 4320,4324 **** if (TREE_CODE (decl) == FUNCTION_DECL /* ??? Don't include alloca, since gcc will always expand it ! inline. If we don't do this, libg++ fails to build. */ && strcmp (name, "alloca") /* ??? Don't include __builtin_next_arg, because then gcc will not --- 4320,4324 ---- if (TREE_CODE (decl) == FUNCTION_DECL /* ??? Don't include alloca, since gcc will always expand it ! inline. If we don't do this, the C++ library fails to build. */ && strcmp (name, "alloca") /* ??? Don't include __builtin_next_arg, because then gcc will not *************** *** 5507,5511 **** if (TARGET_ABICALLS && mips_abi != ABI_32) ! emit_insn (gen_loadgp (XEXP (DECL_RTL (current_function_decl), 0))); } --- 5507,5512 ---- if (TARGET_ABICALLS && mips_abi != ABI_32) ! emit_insn (gen_loadgp (XEXP (DECL_RTL (current_function_decl), 0), ! gen_rtx (REG, DImode, 25))); } diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/mips/mips.md gcc-2.8.1/config/mips/mips.md *** gcc-2.8.0/config/mips/mips.md Tue Dec 23 21:43:04 1997 --- gcc-2.8.1/config/mips/mips.md Tue Feb 3 08:43:49 1998 *************** *** 4,8 **** ;; 64 bit r4000 support by Ian Lance Taylor, ian@cygnus.com, and ;; Brendan Eich, brendan@microunity.com. ! ;; Copyright (C) 1989, 90-96, 1997 Free Software Foundation, Inc. ;; This file is part of GNU CC. --- 4,8 ---- ;; 64 bit r4000 support by Ian Lance Taylor, ian@cygnus.com, and ;; Brendan Eich, brendan@microunity.com. ! ;; Copyright (C) 1989, 90-97, 1998 Free Software Foundation, Inc. ;; This file is part of GNU CC. *************** *** 4076,4083 **** (define_insn "loadgp" [(set (reg:DI 28) ! (unspec_volatile:DI [(match_operand:DI 0 "address_operand" "")] 2)) (clobber (reg:DI 1))] "" ! "%[lui\\t$1,%%hi(%%neg(%%gp_rel(%a0)))\\n\\taddiu\\t$1,$1,%%lo(%%neg(%%gp_rel(%a0)))\\n\\tdaddu\\t$gp,$1,$25%]" [(set_attr "type" "move") (set_attr "mode" "DI") --- 4076,4084 ---- (define_insn "loadgp" [(set (reg:DI 28) ! (unspec_volatile:DI [(match_operand:DI 0 "address_operand" "") ! (match_operand:DI 1 "register_operand" "")] 2)) (clobber (reg:DI 1))] "" ! "%[lui\\t$1,%%hi(%%neg(%%gp_rel(%a0)))\\n\\taddiu\\t$1,$1,%%lo(%%neg(%%gp_rel(%a0)))\\n\\tdaddu\\t$gp,$1,%1%]" [(set_attr "type" "move") (set_attr "mode" "DI") *************** *** 6463,6466 **** --- 6464,6469 ---- ;; For n32/n64, we need to restore gp after a builtin setjmp. We do this ;; by making use of the fact that we've just called __dummy. + ;; ??? Note that nothing guarantees that we're *right* after the return, but + ;; we usually are. There seems to be no way to make that guarantee. (define_expand "builtin_setjmp_receiver" *************** *** 6469,6473 **** " { ! emit_insn (gen_loadgp (gen_rtx (SYMBOL_REF, Pmode, \"__dummy\"))); emit_insn (gen_blockage ()); }") --- 6472,6480 ---- " { ! rtx label = gen_label_rtx (); ! ! emit_label (label); ! emit_insn (gen_loadgp (gen_rtx (LABEL_REF, Pmode, label), ! gen_rtx (REG, DImode, 31))); emit_insn (gen_blockage ()); }") diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/mips/x-dec-osf1 gcc-2.8.1/config/mips/x-dec-osf1 *** gcc-2.8.0/config/mips/x-dec-osf1 Sat Oct 3 07:34:29 1992 --- gcc-2.8.1/config/mips/x-dec-osf1 Mon Feb 2 16:42:01 1998 *************** *** 12,16 **** OPT = -O1 OLDCC = cc -Wf,-XNg1500 -Olimit 3000 $(OPT) - INSTALL = installbsd -c # The bison output files are machine-indep, --- 12,15 ---- diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/mips/x-osfrose gcc-2.8.1/config/mips/x-osfrose *** gcc-2.8.0/config/mips/x-osfrose Fri Oct 1 16:07:30 1993 --- gcc-2.8.1/config/mips/x-osfrose Mon Feb 2 16:41:32 1998 *************** *** 18,22 **** CCLIBFLAGS = -O -DNO_HALF_PIC GCC_CFLAGS = $(INTERNAL_CFLAGS) $(X_CFLAGS) $(T_CFLAGS) $(CFLAGS) -B./ -DPOSIX -DNO_HALF_PIC - INSTALL = installbsd -c LIBGCC2_CFLAGS = -O2 $(GCC_CFLAGS) -g1 -pic-extern LDFLAGS = --- 18,21 ---- diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/msdos/top.sed gcc-2.8.1/config/msdos/top.sed *** gcc-2.8.0/config/msdos/top.sed Thu Dec 4 07:33:27 1997 --- gcc-2.8.1/config/msdos/top.sed Sun Feb 8 08:12:57 1998 *************** *** 20,26 **** /^tmake_file=/ d /^version=/ c\ ! version=2.8.0 /^mainversion=/ c\ ! mainversion=2.8.0 s/CC = cc/CC = gcc/ s/:\$/: \$/g --- 20,26 ---- /^tmake_file=/ d /^version=/ c\ ! version=2.8.1 /^mainversion=/ c\ ! mainversion=2.8.1 s/CC = cc/CC = gcc/ s/:\$/: \$/g diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/pa/pa.c gcc-2.8.1/config/pa/pa.c *** gcc-2.8.0/config/pa/pa.c Wed Dec 3 08:09:44 1997 --- gcc-2.8.1/config/pa/pa.c Sat Feb 14 14:20:17 1998 *************** *** 1,4 **** /* Subroutines for insn-output.c for HPPA. ! Copyright (C) 1992, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. Contributed by Tim Moore (moore@cs.utah.edu), based on sparc.c --- 1,4 ---- /* Subroutines for insn-output.c for HPPA. ! Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. Contributed by Tim Moore (moore@cs.utah.edu), based on sparc.c *************** *** 1063,1066 **** --- 1063,1067 ---- register rtx operand0 = operands[0]; register rtx operand1 = operands[1]; + register rtx tem; if (reload_in_progress && GET_CODE (operand0) == REG *************** *** 1085,1088 **** --- 1086,1098 ---- operand1 = alter_subreg (operand1); } + + if (reload_in_progress && GET_CODE (operand0) == MEM + && ((tem = find_replacement (&XEXP (operand0, 0))) + != XEXP (operand0, 0))) + operand0 = gen_rtx (MEM, GET_MODE (operand0), tem); + if (reload_in_progress && GET_CODE (operand1) == MEM + && ((tem = find_replacement (&XEXP (operand1, 0))) + != XEXP (operand1, 0))) + operand1 = gen_rtx (MEM, GET_MODE (operand1), tem); /* Handle secondary reloads for loads/stores of FP registers from diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/rs6000/rs6000.c gcc-2.8.1/config/rs6000/rs6000.c *** gcc-2.8.0/config/rs6000/rs6000.c Thu Dec 25 15:20:54 1997 --- gcc-2.8.1/config/rs6000/rs6000.c Mon Feb 9 08:59:29 1998 *************** *** 1,4 **** /* Subroutines used for code generation on IBM RS/6000. ! Copyright (C) 1991, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu) --- 1,4 ---- /* Subroutines used for code generation on IBM RS/6000. ! Copyright (C) 1991, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu) *************** *** 1487,1495 **** cum->words, cum->fregno, cum->nargs_prototype, cum->prototype, GET_MODE_NAME (mode), no_rtl); ! if ((DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS) && !no_rtl) { rs6000_sysv_varargs_p = 1; ! save_area = plus_constant (frame_pointer_rtx, RS6000_VARARGS_OFFSET); } if (cum->words < 8) --- 1487,1498 ---- cum->words, cum->fregno, cum->nargs_prototype, cum->prototype, GET_MODE_NAME (mode), no_rtl); ! if (DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS) { rs6000_sysv_varargs_p = 1; ! if (! no_rtl) ! save_area = plus_constant (frame_pointer_rtx, RS6000_VARARGS_OFFSET); } + else + rs6000_sysv_varargs_p = 0; if (cum->words < 8) diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/rs6000/rs6000.h gcc-2.8.1/config/rs6000/rs6000.h *** gcc-2.8.0/config/rs6000/rs6000.h Tue Dec 9 17:42:26 1997 --- gcc-2.8.1/config/rs6000/rs6000.h Sat Feb 14 16:44:23 1998 *************** *** 1,4 **** /* Definitions of target machine for GNU compiler, for IBM RS/6000. ! Copyright (C) 1992, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu) --- 1,4 ---- /* Definitions of target machine for GNU compiler, for IBM RS/6000. ! Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu) *************** *** 2052,2059 **** #define OBJECT_FORMAT_COFF ! /* Define the magic numbers that we recognize as COFF. */ #define MY_ISCOFF(magic) \ ! ((magic) == U802WRMAGIC || (magic) == U802ROMAGIC || (magic) == U802TOCMAGIC) /* This is the only version of nm that collect2 can work with. */ --- 2052,2063 ---- #define OBJECT_FORMAT_COFF ! /* Define the magic numbers that we recognize as COFF. ! AIX 4.3 adds U803XTOCMAGIC (0757) for 64-bit executables, but collect2.c ! does not include these files in the right order to conditionally define ! the value in the macro. */ #define MY_ISCOFF(magic) \ ! ((magic) == U802WRMAGIC || (magic) == U802ROMAGIC \ ! || (magic) == U802TOCMAGIC || (magic) == 0757) /* This is the only version of nm that collect2 can work with. */ diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/rs6000/rs6000.md gcc-2.8.1/config/rs6000/rs6000.md *** gcc-2.8.0/config/rs6000/rs6000.md Wed Dec 3 08:09:56 1997 --- gcc-2.8.1/config/rs6000/rs6000.md Thu Feb 12 20:23:22 1998 *************** *** 2120,2125 **** int size = INTVAL (operands[1]) & 31; ! operands[4] = gen_rtx (CONST_INT, VOIDmode, 32 - start - size); ! operands[1] = gen_rtx (CONST_INT, VOIDmode, start + size - 1); return \"{rlimi|rlwimi} %0,%3,%h4,%h2,%h1\"; }") --- 2120,2125 ---- int size = INTVAL (operands[1]) & 31; ! operands[4] = GEN_INT (32 - start - size); ! operands[1] = GEN_INT (start + size - 1); return \"{rlimi|rlwimi} %0,%3,%h4,%h2,%h1\"; }") *************** *** 2138,2143 **** int size = INTVAL (operands[1]) & 31; ! operands[4] = gen_rtx (CONST_INT, VOIDmode, shift - start - size); ! operands[1] = gen_rtx (CONST_INT, VOIDmode, start + size - 1); return \"{rlimi|rlwimi} %0,%3,%h4,%h2,%h1\"; }") --- 2138,2143 ---- int size = INTVAL (operands[1]) & 31; ! operands[4] = GEN_INT (shift - start - size); ! operands[1] = GEN_INT (start + size - 1); return \"{rlimi|rlwimi} %0,%3,%h4,%h2,%h1\"; }") *************** *** 2156,2161 **** int size = INTVAL (operands[1]) & 31; ! operands[4] = gen_rtx (CONST_INT, VOIDmode, 32 - shift - start - size); ! operands[1] = gen_rtx (CONST_INT, VOIDmode, start + size - 1); return \"{rlimi|rlwimi} %0,%3,%h4,%h2,%h1\"; }") --- 2156,2161 ---- int size = INTVAL (operands[1]) & 31; ! operands[4] = GEN_INT (32 - shift - start - size); ! operands[1] = GEN_INT (start + size - 1); return \"{rlimi|rlwimi} %0,%3,%h4,%h2,%h1\"; }") *************** *** 2174,2179 **** int size = INTVAL (operands[1]) & 31; ! operands[4] = gen_rtx (CONST_INT, VOIDmode, 32 - shift - start - size); ! operands[1] = gen_rtx (CONST_INT, VOIDmode, start + size - 1); return \"{rlimi|rlwimi} %0,%3,%h4,%h2,%h1\"; }") --- 2174,2179 ---- int size = INTVAL (operands[1]) & 31; ! operands[4] = GEN_INT (32 - shift - start - size); ! operands[1] = GEN_INT (start + size - 1); return \"{rlimi|rlwimi} %0,%3,%h4,%h2,%h1\"; }") *************** *** 2197,2201 **** operands[5] = gen_rtx (CONST_INT, VOIDmode, extract_start + extract_size - insert_start - insert_size); ! operands[1] = gen_rtx (CONST_INT, VOIDmode, insert_start + insert_size - 1); return \"{rlimi|rlwimi} %0,%3,%h5,%h2,%h1\"; }") --- 2197,2201 ---- operands[5] = gen_rtx (CONST_INT, VOIDmode, extract_start + extract_size - insert_start - insert_size); ! operands[1] = GEN_INT (insert_start + insert_size - 1); return \"{rlimi|rlwimi} %0,%3,%h5,%h2,%h1\"; }") *************** *** 2212,2216 **** int size = INTVAL (operands[1]) & 63; ! operands[2] = gen_rtx (CONST_INT, VOIDmode, 64 - start - size); return \"rldimi %0,%3,%H2,%H1\"; }") --- 2212,2216 ---- int size = INTVAL (operands[1]) & 63; ! operands[2] = GEN_INT (64 - start - size); return \"rldimi %0,%3,%H2,%H1\"; }") *************** *** 2246,2250 **** operands[3] = const0_rtx; else ! operands[3] = gen_rtx (CONST_INT, VOIDmode, start + size); return \"{rlinm|rlwinm} %0,%1,%3,%s2,31\"; }") --- 2246,2250 ---- operands[3] = const0_rtx; else ! operands[3] = GEN_INT (start + size); return \"{rlinm|rlwinm} %0,%1,%3,%s2,31\"; }") *************** *** 2283,2287 **** operands[3] = const0_rtx; else ! operands[3] = gen_rtx (CONST_INT, VOIDmode, start + size); return \"{rlinm.|rlwinm.} %4,%1,%3,%s2,31\"; }" --- 2283,2287 ---- operands[3] = const0_rtx; else ! operands[3] = GEN_INT (start + size); return \"{rlinm.|rlwinm.} %4,%1,%3,%s2,31\"; }" *************** *** 2304,2308 **** if (start >= 16 && start + size == 32) { ! operands[3] = gen_rtx (CONST_INT, VOIDmode, (1 << (32 - start)) - 1); return \"{andil.|andi.} %0,%1,%3\"; } --- 2304,2308 ---- if (start >= 16 && start + size == 32) { ! operands[3] = GEN_INT ((1 << (32 - start)) - 1); return \"{andil.|andi.} %0,%1,%3\"; } *************** *** 2311,2315 **** operands[3] = const0_rtx; else ! operands[3] = gen_rtx (CONST_INT, VOIDmode, start + size); return \"{rlinm.|rlwinm.} %0,%1,%3,%s2,31\"; }" --- 2311,2315 ---- operands[3] = const0_rtx; else ! operands[3] = GEN_INT (start + size); return \"{rlinm.|rlwinm.} %0,%1,%3,%s2,31\"; }" *************** *** 2330,2335 **** operands[3] = const0_rtx; else ! operands[3] = gen_rtx (CONST_INT, VOIDmode, start + size); ! operands[2] = gen_rtx (CONST_INT, VOIDmode, 64 - size); return \"rldicl %0,%1,%3,%2\"; }") --- 2330,2335 ---- operands[3] = const0_rtx; else ! operands[3] = GEN_INT (start + size); ! operands[2] = GEN_INT (64 - size); return \"rldicl %0,%1,%3,%2\"; }") *************** *** 2351,2356 **** operands[3] = const0_rtx; else ! operands[3] = gen_rtx (CONST_INT, VOIDmode, start + size); ! operands[2] = gen_rtx (CONST_INT, VOIDmode, 64 - size); return \"rldicl. %4,%1,%3,%2\"; }") --- 2351,2356 ---- operands[3] = const0_rtx; else ! operands[3] = GEN_INT (start + size); ! operands[2] = GEN_INT (64 - size); return \"rldicl. %4,%1,%3,%2\"; }") *************** *** 2373,2378 **** operands[3] = const0_rtx; else ! operands[3] = gen_rtx (CONST_INT, VOIDmode, start + size); ! operands[2] = gen_rtx (CONST_INT, VOIDmode, 64 - size); return \"rldicl. %0,%1,%3,%2\"; }") --- 2373,2378 ---- operands[3] = const0_rtx; else ! operands[3] = GEN_INT (start + size); ! operands[2] = GEN_INT (64 - size); return \"rldicl. %0,%1,%3,%2\"; }") *************** *** 2753,2757 **** (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r") (match_operand:SI 2 "const_int_operand" "i")) 0)))] ! "includes_rshift_p (operands[2], gen_rtx (CONST_INT, VOIDmode, 255))" "{rlinm|rlwinm} %0,%1,%s2,0xff") --- 2753,2757 ---- (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r") (match_operand:SI 2 "const_int_operand" "i")) 0)))] ! "includes_rshift_p (operands[2], GEN_INT (255))" "{rlinm|rlwinm} %0,%1,%s2,0xff") *************** *** 2765,2769 **** (const_int 0))) (clobber (match_scratch:SI 3 "=r"))] ! "includes_rshift_p (operands[2], gen_rtx (CONST_INT, VOIDmode, 255))" "{rlinm.|rlwinm.} %3,%1,%s2,0xff" [(set_attr "type" "delayed_compare")]) --- 2765,2769 ---- (const_int 0))) (clobber (match_scratch:SI 3 "=r"))] ! "includes_rshift_p (operands[2], GEN_INT (255))" "{rlinm.|rlwinm.} %3,%1,%s2,0xff" [(set_attr "type" "delayed_compare")]) *************** *** 2779,2783 **** (set (match_operand:SI 0 "gpc_reg_operand" "=r") (zero_extend:SI (subreg:QI (lshiftrt:SI (match_dup 1) (match_dup 2)) 0)))] ! "includes_rshift_p (operands[2], gen_rtx (CONST_INT, VOIDmode, 255))" "{rlinm.|rlwinm.} %0,%1,%s2,0xff" [(set_attr "type" "delayed_compare")]) --- 2779,2783 ---- (set (match_operand:SI 0 "gpc_reg_operand" "=r") (zero_extend:SI (subreg:QI (lshiftrt:SI (match_dup 1) (match_dup 2)) 0)))] ! "includes_rshift_p (operands[2], GEN_INT (255))" "{rlinm.|rlwinm.} %0,%1,%s2,0xff" [(set_attr "type" "delayed_compare")]) *************** *** 2789,2793 **** (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r") (match_operand:SI 2 "const_int_operand" "i")) 0)))] ! "includes_rshift_p (operands[2], gen_rtx (CONST_INT, VOIDmode, 65535))" "{rlinm|rlwinm} %0,%1,%s2,0xffff") --- 2789,2793 ---- (lshiftrt:SI (match_operand:SI 1 "gpc_reg_operand" "r") (match_operand:SI 2 "const_int_operand" "i")) 0)))] ! "includes_rshift_p (operands[2], GEN_INT (65535))" "{rlinm|rlwinm} %0,%1,%s2,0xffff") *************** *** 2801,2805 **** (const_int 0))) (clobber (match_scratch:SI 3 "=r"))] ! "includes_rshift_p (operands[2], gen_rtx (CONST_INT, VOIDmode, 65535))" "{rlinm.|rlwinm.} %3,%1,%s2,0xffff" [(set_attr "type" "delayed_compare")]) --- 2801,2805 ---- (const_int 0))) (clobber (match_scratch:SI 3 "=r"))] ! "includes_rshift_p (operands[2], GEN_INT (65535))" "{rlinm.|rlwinm.} %3,%1,%s2,0xffff" [(set_attr "type" "delayed_compare")]) *************** *** 2815,2819 **** (set (match_operand:SI 0 "gpc_reg_operand" "=r") (zero_extend:SI (subreg:HI (lshiftrt:SI (match_dup 1) (match_dup 2)) 0)))] ! "includes_rshift_p (operands[2], gen_rtx (CONST_INT, VOIDmode, 65535))" "{rlinm.|rlwinm.} %0,%1,%s2,0xffff" [(set_attr "type" "delayed_compare")]) --- 2815,2819 ---- (set (match_operand:SI 0 "gpc_reg_operand" "=r") (zero_extend:SI (subreg:HI (lshiftrt:SI (match_dup 1) (match_dup 2)) 0)))] ! "includes_rshift_p (operands[2], GEN_INT (65535))" "{rlinm.|rlwinm.} %0,%1,%s2,0xffff" [(set_attr "type" "delayed_compare")]) *************** *** 4860,4865 **** second_c = orig | ~ first_c; ! operands[3] = gen_rtx (CONST_INT, VOIDmode, first_c); ! operands[4] = gen_rtx (CONST_INT, VOIDmode, second_c); }") --- 4860,4865 ---- second_c = orig | ~ first_c; ! operands[3] = GEN_INT (first_c); ! operands[4] = GEN_INT (second_c); }") *************** *** 4909,4913 **** operands[3] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) & (~ (HOST_WIDE_INT) 0xffff)); ! operands[4] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) & 0xffff); }") --- 4909,4913 ---- operands[3] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) & (~ (HOST_WIDE_INT) 0xffff)); ! operands[4] = GEN_INT (INTVAL (operands[2]) & 0xffff); }") *************** *** 4957,4961 **** operands[3] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) & 0xffff0000); ! operands[4] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) & 0xffff); }") --- 4957,4961 ---- operands[3] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[2]) & 0xffff0000); ! operands[4] = GEN_INT (INTVAL (operands[2]) & 0xffff); }") *************** *** 5356,5360 **** operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[1]) & 0xffff0000); ! operands[3] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[1]) & 0xffff); }") --- 5356,5360 ---- operands[2] = gen_rtx (CONST_INT, VOIDmode, INTVAL (operands[1]) & 0xffff0000); ! operands[3] = GEN_INT (INTVAL (operands[1]) & 0xffff); }") *************** *** 8096,8101 **** int xorv = c ^ sextc; ! operands[4] = gen_rtx (CONST_INT, VOIDmode, xorv); ! operands[5] = gen_rtx (CONST_INT, VOIDmode, sextc); }") --- 8096,8101 ---- int xorv = c ^ sextc; ! operands[4] = GEN_INT (xorv); ! operands[5] = GEN_INT (sextc); }") *************** *** 8224,8229 **** count = 32 - (put_bit - is_bit); ! operands[4] = gen_rtx (CONST_INT, VOIDmode, count); ! operands[5] = gen_rtx (CONST_INT, VOIDmode, put_bit); return \"%D1mfcr %0\;{rlinm|rlwinm} %0,%0,%4,%5,%5\"; --- 8224,8229 ---- count = 32 - (put_bit - is_bit); ! operands[4] = GEN_INT (count); ! operands[5] = GEN_INT (put_bit); return \"%D1mfcr %0\;{rlinm|rlwinm} %0,%0,%4,%5,%5\"; *************** *** 8254,8259 **** count = 32 - (put_bit - is_bit); ! operands[5] = gen_rtx (CONST_INT, VOIDmode, count); ! operands[6] = gen_rtx (CONST_INT, VOIDmode, put_bit); return \"%D1mfcr %4\;{rlinm.|rlwinm.} %4,%4,%5,%6,%6\"; --- 8254,8259 ---- count = 32 - (put_bit - is_bit); ! operands[5] = GEN_INT (count); ! operands[6] = GEN_INT (put_bit); return \"%D1mfcr %4\;{rlinm.|rlwinm.} %4,%4,%5,%6,%6\"; diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/rs6000/x-aix31 gcc-2.8.1/config/rs6000/x-aix31 *** gcc-2.8.0/config/rs6000/x-aix31 Thu Jan 25 12:28:11 1996 --- gcc-2.8.1/config/rs6000/x-aix31 Mon Feb 2 16:42:39 1998 *************** *** 1,5 **** # configuration for IBM rs6000 running aix - INSTALL=/usr/ucb/install -c - # Show we need to use the C version of ALLOCA ALLOCA=alloca.o --- 1,3 ---- diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/sparc/linux.h gcc-2.8.1/config/sparc/linux.h *** gcc-2.8.0/config/sparc/linux.h Fri Dec 5 07:23:02 1997 --- gcc-2.8.1/config/sparc/linux.h Fri Feb 20 08:22:44 1998 *************** *** 1,4 **** /* Definitions for SPARC running Linux-based GNU systems with ELF. ! Copyright (C) 1996, 1997 Free Software Foundation, Inc. Contributed by Eddie C. Dost (ecd@skynet.be) --- 1,4 ---- /* Definitions for SPARC running Linux-based GNU systems with ELF. ! Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. Contributed by Eddie C. Dost (ecd@skynet.be) *************** *** 36,39 **** --- 36,44 ---- #endif + #ifndef USE_GNULIBC_1 + #undef DEFAULT_VTABLE_THUNKS + #define DEFAULT_VTABLE_THUNKS 1 + #endif + /* Use stabs instead of DWARF debug format. */ #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG *************** *** 121,125 **** #else #define LIB_SPEC \ ! "%{!shared: %{mieee-fp:-lieee} %{pthread:-lpthread} \ %{profile:-lc_p} %{!profile: -lc}}" #endif --- 126,131 ---- #else #define LIB_SPEC \ ! "%{shared: -lc} \ ! %{!shared: %{mieee-fp:-lieee} %{pthread:-lpthread} \ %{profile:-lc_p} %{!profile: -lc}}" #endif diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/sparc/linux64.h gcc-2.8.1/config/sparc/linux64.h *** gcc-2.8.0/config/sparc/linux64.h Fri Dec 5 07:24:26 1997 --- gcc-2.8.1/config/sparc/linux64.h Fri Feb 20 08:22:45 1998 *************** *** 1,4 **** /* Definitions for 64-bit SPARC running Linux-based GNU systems with ELF. ! Copyright 1996, 1997 Free Software Foundation, Inc. Contributed by David S. Miller (davem@caip.rutgers.edu) --- 1,4 ---- /* Definitions for 64-bit SPARC running Linux-based GNU systems with ELF. ! Copyright 1996, 1997, 1998 Free Software Foundation, Inc. Contributed by David S. Miller (davem@caip.rutgers.edu) *************** *** 49,56 **** #define ASM_CPU_DEFAULT_SPEC "-Av9a" - #undef LIBGCC_SPEC - #define LIBGCC_SPEC \ - "%{!shared:-lgcc}" - /* Provide a STARTFILE_SPEC appropriate for GNU/Linux. Here we add the GNU/Linux magical crtbegin.o file (see crtstuff.c) which --- 49,52 ---- *************** *** 112,123 **** %{fpic:-D__PIC__ -D__pic__} \ %{posix:-D_POSIX_SOURCE} \ " ! /* We no longer link with libc_p.a or libg.a by default. If you ! want to profile or debug the GNU/Linux C library, please add ! -lc_p or -ggdb to LDFLAGS at the link time, respectively. */ #undef LIB_SPEC #define LIB_SPEC \ ! "%{!shared: %{mieee-fp:-lieee} %{p:-lgmon} %{pg:-lgmon} \ ! %{!ggdb:-lc} %{ggdb:-lg}}" /* Provide a LINK_SPEC appropriate for GNU/Linux. Here we provide support --- 108,119 ---- %{fpic:-D__PIC__ -D__pic__} \ %{posix:-D_POSIX_SOURCE} \ + %{pthread:-D_REENTRANT} \ " ! #undef LIB_SPEC #define LIB_SPEC \ ! "%{shared: -lc} \ ! %{!shared: %{mieee-fp:-lieee} %{pthread:-lpthread} \ ! %{profile:-lc_p} %{!profile: -lc}}" /* Provide a LINK_SPEC appropriate for GNU/Linux. Here we provide support diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/sparc/sol2-sld.h gcc-2.8.1/config/sparc/sol2-sld.h *** gcc-2.8.0/config/sparc/sol2-sld.h Wed Dec 31 19:00:00 1969 --- gcc-2.8.1/config/sparc/sol2-sld.h Fri Feb 20 08:26:55 1998 *************** *** 0 **** --- 1,11 ---- + /* Definitions of target machine for GNU compiler, for SPARC running Solaris 2 + using the system linker. */ + + #include "sparc/sol2.h" + + /* At least up through Solaris 2.6, + the system linker does not work with DWARF or DWARF2, + since it does not have working support for relocations + to unaligned data. */ + + #define LINKER_DOES_NOT_WORK_WITH_DWARF2 diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/sparc/sparc.c gcc-2.8.1/config/sparc/sparc.c *** gcc-2.8.0/config/sparc/sparc.c Wed Dec 24 18:03:40 1997 --- gcc-2.8.1/config/sparc/sparc.c Wed Feb 25 21:05:09 1998 *************** *** 1,4 **** /* Subroutines for insn-output.c for Sun SPARC. ! Copyright (C) 1987, 88, 89, 92-96, 1997 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) 64 bit SPARC V9 support by Michael Tiemann, Jim Wilson, and Doug Evans, --- 1,4 ---- /* Subroutines for insn-output.c for Sun SPARC. ! Copyright (C) 1987, 88, 89, 92-97, 1998 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) 64 bit SPARC V9 support by Michael Tiemann, Jim Wilson, and Doug Evans, *************** *** 1495,1498 **** --- 1495,1502 ---- start_sequence (); + /* If -O0, show the PIC register remains live before this. */ + if (obey_regdecls) + emit_insn (gen_rtx (USE, VOIDmode, pic_offset_table_rtx)); + l1 = gen_label_rtx (); diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/sparc/sysv4.h gcc-2.8.1/config/sparc/sysv4.h *** gcc-2.8.0/config/sparc/sysv4.h Mon Oct 20 17:24:43 1997 --- gcc-2.8.1/config/sparc/sysv4.h Tue Feb 3 15:24:25 1998 *************** *** 1,6 **** /* Target definitions for GNU compiler for Sparc running System V.4 ! Copyright (C) 1991, 1992, 1995, 1996, 1997 Free Software Foundation, Inc. ! ! Written by Ron Guilmette (rfg@netcom.com). This file is part of GNU CC. --- 1,5 ---- /* Target definitions for GNU compiler for Sparc running System V.4 ! Copyright (C) 1991, 92, 95, 96, 97, 1998 Free Software Foundation, Inc. ! Contributed by Ron Guilmette (rfg@monkeys.com). This file is part of GNU CC. *************** *** 137,144 **** */ ! #define DBX_REGISTER_NUMBER(REGNO) \ ! (((REGNO) < 32) ? (REGNO) \ ! : ((REGNO) < 63) ? ((REGNO) + 8) \ ! : (abort (), 0)) /* A set of symbol definitions for assembly pseudo-ops which will --- 136,140 ---- */ ! #define DBX_REGISTER_NUMBER(REGNO) ((REGNO) < 32 ? (REGNO) : (REGNO) + 8) /* A set of symbol definitions for assembly pseudo-ops which will diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/t-svr4 gcc-2.8.1/config/t-svr4 *** gcc-2.8.0/config/t-svr4 Mon Mar 13 18:09:56 1995 --- gcc-2.8.1/config/t-svr4 Sat Feb 14 08:30:36 1998 *************** *** 3,7 **** # to produce a shared library, but since we don't know ahead of time when # we will be doing that, we just always use -fPIC when compiling the ! # routines in crtstuff.c. CRTSTUFF_T_CFLAGS = -fPIC --- 3,8 ---- # to produce a shared library, but since we don't know ahead of time when # we will be doing that, we just always use -fPIC when compiling the ! # routines in crtstuff.c. Likewise for libgcc2.c. CRTSTUFF_T_CFLAGS = -fPIC + TARGET_LIBGCC2_CFLAGS = -fPIC diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/vax/ultrix.h gcc-2.8.1/config/vax/ultrix.h *** gcc-2.8.0/config/vax/ultrix.h Wed Oct 9 16:19:11 1996 --- gcc-2.8.1/config/vax/ultrix.h Fri Feb 6 15:24:15 1998 *************** *** 8,9 **** --- 8,12 ---- #define WCHAR_TYPE "unsigned int" #define WCHAR_TYPE_SIZE 32 + + /* True for Ultrix 4.3 and later and possibly earlier. */ + #define HAVE_ATEXIT diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/vax/vax.md gcc-2.8.1/config/vax/vax.md *** gcc-2.8.0/config/vax/vax.md Fri Jun 28 12:00:00 1996 --- gcc-2.8.1/config/vax/vax.md Wed Feb 25 21:05:12 1998 *************** *** 1,4 **** ;;- Machine description for GNU compiler, Vax Version ! ;; Copyright (C) 1987, 88, 91, 94, 95, 1996 Free Software Foundation, Inc. ;; This file is part of GNU CC. --- 1,4 ---- ;;- Machine description for GNU compiler, Vax Version ! ;; Copyright (C) 1987, 88, 91, 94-96, 1998 Free Software Foundation, Inc. ;; This file is part of GNU CC. *************** *** 1838,1844 **** ;; Note that operand 1 is total size of args, in bytes, ;; and what the call insn wants is the number of words. (define_insn "call_pop" [(call (match_operand:QI 0 "memory_operand" "m") ! (match_operand:QI 1 "general_operand" "g")) (set (reg:SI 14) (plus:SI (reg:SI 14) (match_operand:SI 3 "immediate_operand" "i")))] --- 1838,1847 ---- ;; Note that operand 1 is total size of args, in bytes, ;; and what the call insn wants is the number of words. + ;; It is used in the call instruction as a byte, but in the addl2 as + ;; a word. Since the only time we actually use it in the call instruction + ;; is when it is a constant, SImode (for addl2) is the proper mode. (define_insn "call_pop" [(call (match_operand:QI 0 "memory_operand" "m") ! (match_operand:SI 1 "general_operand" "g")) (set (reg:SI 14) (plus:SI (reg:SI 14) (match_operand:SI 3 "immediate_operand" "i")))] *************** *** 1855,1859 **** [(set (match_operand 0 "" "=g") (call (match_operand:QI 1 "memory_operand" "m") ! (match_operand:QI 2 "general_operand" "g"))) (set (reg:SI 14) (plus:SI (reg:SI 14) (match_operand:SI 4 "immediate_operand" "i")))] --- 1858,1862 ---- [(set (match_operand 0 "" "=g") (call (match_operand:QI 1 "memory_operand" "m") ! (match_operand:SI 2 "general_operand" "g"))) (set (reg:SI 14) (plus:SI (reg:SI 14) (match_operand:SI 4 "immediate_operand" "i")))] *************** *** 1871,1875 **** (define_insn "" [(call (match_operand:QI 0 "memory_operand" "m") ! (match_operand:QI 1 "general_operand" "g")) (set (reg:SI 14) (reg:SI 14))] "" --- 1874,1878 ---- (define_insn "" [(call (match_operand:QI 0 "memory_operand" "m") ! (match_operand:SI 1 "general_operand" "g")) (set (reg:SI 14) (reg:SI 14))] "" *************** *** 1885,1889 **** [(set (match_operand 0 "" "=g") (call (match_operand:QI 1 "memory_operand" "m") ! (match_operand:QI 2 "general_operand" "g"))) (set (reg:SI 14) (reg:SI 14))] "" --- 1888,1892 ---- [(set (match_operand 0 "" "=g") (call (match_operand:QI 1 "memory_operand" "m") ! (match_operand:SI 2 "general_operand" "g"))) (set (reg:SI 14) (reg:SI 14))] "" diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/vax/vms.h gcc-2.8.1/config/vax/vms.h *** gcc-2.8.0/config/vax/vms.h Sun Oct 19 12:29:03 1997 --- gcc-2.8.1/config/vax/vms.h Tue Feb 3 13:53:29 1998 *************** *** 305,311 **** /* The following definitions are used in libgcc2.c with the __main function. The _SHR symbol is used when the sharable image library ! for libg++ is used - this is picked up automatically by the linker ! and this symbol points to the start of the __CTOR_LIST__ from libg++. ! If libg++ is not being used, then __CTOR_LIST_SHR__ occurs just after __CTOR_LIST__, and essentially points to the same list as __CTOR_LIST. */ --- 305,311 ---- /* The following definitions are used in libgcc2.c with the __main function. The _SHR symbol is used when the sharable image library ! for the C++ library is used - this is picked up automatically by the linker ! and this symbol points to the start of __CTOR_LIST__ from the C++ library. ! If the C++ library is not used, then __CTOR_LIST_SHR__ occurs just after __CTOR_LIST__, and essentially points to the same list as __CTOR_LIST. */ Only in gcc-2.8.0/config/vax: x-vax diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config/winnt/config-nt.sed gcc-2.8.1/config/winnt/config-nt.sed *** gcc-2.8.0/config/winnt/config-nt.sed Thu Dec 4 07:34:26 1997 --- gcc-2.8.1/config/winnt/config-nt.sed Sun Feb 8 08:14:09 1998 *************** *** 14,18 **** /^lang_options_files=/ d /^version=/ c\ ! version=2.8.0 s/CC = cc/CC = cl/ s/^SHELL =.*/SHELL =/ --- 14,18 ---- /^lang_options_files=/ d /^version=/ c\ ! version=2.8.1 s/CC = cc/CC = cl/ s/^SHELL =.*/SHELL =/ diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config.guess gcc-2.8.1/config.guess *** gcc-2.8.0/config.guess Tue Sep 9 10:10:23 1997 --- gcc-2.8.1/config.guess Tue Feb 3 13:27:42 1998 *************** *** 1,5 **** #! /bin/sh # Attempt to guess a canonical system name. ! # Copyright (C) 1992, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify it --- 1,5 ---- #! /bin/sh # Attempt to guess a canonical system name. ! # Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify it *************** *** 479,486 **** exit 0 ;; i*:CYGWIN*:*) ! echo i386-pc-cygwin32 exit 0 ;; i*:MINGW*:*) ! echo i386-pc-mingw32 exit 0 ;; p*:CYGWIN*:*) --- 479,486 ---- exit 0 ;; i*:CYGWIN*:*) ! echo ${UNAME_MACHINE}-pc-cygwin32 exit 0 ;; i*:MINGW*:*) ! echo ${UNAME_MACHINE}-pc-mingw32 exit 0 ;; p*:CYGWIN*:*) *************** *** 494,497 **** --- 494,503 ---- exit 0 ;; *:Linux:*:*) + # uname on the ARM produces all sorts of strangeness, and we need to + # filter it out. + case "$UNAME_MACHINE" in + arm* | sa110*) UNAME_MACHINE="arm" ;; + esac + # The BFD linker knows what the default object file format is, so # first see if it will tell us. *************** *** 507,510 **** --- 513,517 ---- i?86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0 ;; sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; + armlinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; elf32ppc) echo "powerpc-unknown-linux-gnu" ; exit 0 ;; diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/config.sub gcc-2.8.1/config.sub *** gcc-2.8.0/config.sub Wed Sep 10 17:15:13 1997 --- gcc-2.8.1/config.sub Fri Feb 13 07:16:06 1998 *************** *** 1,5 **** #! /bin/sh # Configuration validation subroutine script, version 1.1. ! # Copyright (C) 1991, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software --- 1,5 ---- #! /bin/sh # Configuration validation subroutine script, version 1.1. ! # Copyright (C) 1991, 92-97, 1998 Free Software Foundation, Inc. # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software *************** *** 163,167 **** # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. ! i[3456]86) basic_machine=$basic_machine-pc ;; --- 163,167 ---- # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. ! i[34567]86) basic_machine=$basic_machine-pc ;; *************** *** 172,176 **** ;; # Recognize the basic CPU types with company name. ! vax-* | tahoe-* | i[3456]86-* | i860-* | m32r-* | m68k-* | m68000-* \ | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \ | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ --- 172,176 ---- ;; # Recognize the basic CPU types with company name. ! vax-* | tahoe-* | i[34567]86-* | i860-* | m32r-* | m68k-* | m68000-* \ | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \ | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ *************** *** 351,367 **** ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? ! i[3456]86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; ! i[3456]86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; ! i[3456]86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; ! i[3456]86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 --- 351,367 ---- ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? ! i[34567]86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; ! i[34567]86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; ! i[34567]86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; ! i[34567]86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 *************** *** 470,492 **** basic_machine=ns32k-pc532 ;; ! pentium | p5) ! basic_machine=i586-intel ;; ! pentiumpro | p6) ! basic_machine=i686-intel ;; ! pentium-* | p5-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ! pentiumpro-* | p6-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ! k5) ! # We don't have specific support for AMD's K5 yet, so just call it a Pentium ! basic_machine=i586-amd ! ;; ! nexen) ! # We don't have specific support for Nexgen yet, so just call it a Pentium ! basic_machine=i586-nexgen ;; pn) --- 470,490 ---- basic_machine=ns32k-pc532 ;; ! pentium | p5 | k5 | nexen) ! basic_machine=i586-pc ;; ! pentiumpro | p6 | k6 | 6x86) ! basic_machine=i686-pc ;; ! pentiumii | pentium2) ! basic_machine=i786-pc ! ;; ! pentium-* | p5-* | k5-* | nexen-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ! pentiumpro-* | p6-* | k6-* | 6x86-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ! pentiumii-* | pentium2-*) ! basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/configure.in gcc-2.8.1/configure.in *** gcc-2.8.0/configure.in Mon Dec 22 19:19:36 1997 --- gcc-2.8.1/configure.in Sat Feb 28 15:58:12 1998 *************** *** 2,6 **** # Process this file with autoconf to generate a configuration script. ! # Copyright (C) 1997 Free Software Foundation, Inc. #This file is part of GNU CC. --- 2,6 ---- # Process this file with autoconf to generate a configuration script. ! # Copyright (C) 1997, 1998 Free Software Foundation, Inc. #This file is part of GNU CC. *************** *** 164,167 **** --- 164,168 ---- AC_CHECK_FUNCS(getrlimit) AC_CHECK_FUNCS(setrlimit) + AC_CHECK_FUNCS(sysconf) GCC_NEED_DECLARATION(malloc) *************** *** 172,175 **** --- 173,177 ---- GCC_NEED_DECLARATION(rindex) GCC_NEED_DECLARATION(getenv) + GCC_NEED_DECLARATION(sbrk) AC_DECL_SYS_SIGLIST *************** *** 240,244 **** cpu_type=convex ;; ! i[[3456]]86-*-*) cpu_type=i386 ;; --- 242,246 ---- cpu_type=convex ;; ! i[[34567]]86-*-*) cpu_type=i386 ;; *************** *** 328,331 **** --- 330,334 ---- target_cpu_default="MASK_GAS" tmake_file="t-linux alpha/t-linux" + extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o" xmake_file=none fixincludes=Makefile.in *************** *** 664,668 **** i370-*-mvs*) ;; ! i[[3456]]86-ibm-aix*) # IBM PS/2 running AIX if [[ x$gas = xyes ]] then --- 667,671 ---- i370-*-mvs*) ;; ! i[[34567]]86-ibm-aix*) # IBM PS/2 running AIX if [[ x$gas = xyes ]] then *************** *** 690,694 **** tmake_file=i386/t-crtpic ;; ! i[[3456]]86-next-*) tm_file=i386/next.h xm_file=i386/xm-next.h --- 693,697 ---- tmake_file=i386/t-crtpic ;; ! i[[34567]]86-next-*) tm_file=i386/next.h xm_file=i386/xm-next.h *************** *** 700,704 **** fi ;; ! i[[3456]]86-sequent-bsd*) # 80386 from Sequent use_collect2=yes if [[ x$gas = xyes ]] --- 703,707 ---- fi ;; ! i[[34567]]86-sequent-bsd*) # 80386 from Sequent use_collect2=yes if [[ x$gas = xyes ]] *************** *** 709,713 **** fi ;; ! i[[3456]]86-sequent-ptx1*) xm_file=i386/xm-sysv3.h xmake_file=i386/x-sysv3 --- 712,716 ---- fi ;; ! i[[34567]]86-sequent-ptx1*) xm_file=i386/xm-sysv3.h xmake_file=i386/x-sysv3 *************** *** 719,723 **** broken_install=yes ;; ! i[[3456]]86-sequent-ptx2* | i[[3456]]86-sequent-sysv3*) xm_file=i386/xm-sysv3.h xmake_file=i386/x-sysv3 --- 722,726 ---- broken_install=yes ;; ! i[[34567]]86-sequent-ptx2* | i[[34567]]86-sequent-sysv3*) xm_file=i386/xm-sysv3.h xmake_file=i386/x-sysv3 *************** *** 729,733 **** broken_install=yes ;; ! i[[3456]]86-sequent-ptx4* | i[[3456]]86-sequent-sysv4*) xm_file=i386/xm-sysv4.h xmake_file=x-svr4 --- 732,736 ---- broken_install=yes ;; ! i[[34567]]86-sequent-ptx4* | i[[34567]]86-sequent-sysv4*) xm_file=i386/xm-sysv4.h xmake_file=x-svr4 *************** *** 744,757 **** use_collect2=yes ;; ! i[[3456]]86-*-aout*) tm_file=i386/i386-aout.h tmake_file=i386/t-i386bare ;; ! i[[3456]]86-*-bsdi* | i[[345]]86-*-bsd386*) tm_file=i386/bsd386.h xm_file=i386/xm-bsd386.h # tmake_file=t-libc-ok ;; ! i[[3456]]86-*-bsd*) tm_file=i386/386bsd.h xm_file=i386/xm-bsd386.h --- 747,760 ---- use_collect2=yes ;; ! i[[34567]]86-*-aout*) tm_file=i386/i386-aout.h tmake_file=i386/t-i386bare ;; ! i[[34567]]86-*-bsdi* | i[[34567]]86-*-bsd386*) tm_file=i386/bsd386.h xm_file=i386/xm-bsd386.h # tmake_file=t-libc-ok ;; ! i[[34567]]86-*-bsd*) tm_file=i386/386bsd.h xm_file=i386/xm-bsd386.h *************** *** 760,764 **** # use_collect2=yes ;; ! i[[3456]]86-*-freebsdelf*) tm_file="i386/i386.h i386/att.h linux.h i386/freebsd-elf.h i386/perform.h" # On FreeBSD, the headers are already ok, except for math.h. --- 763,767 ---- # use_collect2=yes ;; ! i[[34567]]86-*-freebsdelf*) tm_file="i386/i386.h i386/att.h linux.h i386/freebsd-elf.h i386/perform.h" # On FreeBSD, the headers are already ok, except for math.h. *************** *** 769,773 **** stabs=yes ;; ! i[[3456]]86-*-freebsd*) tm_file=i386/freebsd.h # On FreeBSD, the headers are already ok, except for math.h. --- 772,776 ---- stabs=yes ;; ! i[[34567]]86-*-freebsd*) tm_file=i386/freebsd.h # On FreeBSD, the headers are already ok, except for math.h. *************** *** 775,779 **** tmake_file=i386/t-freebsd ;; ! i[[3456]]86-*-netbsd*) tm_file=i386/netbsd.h # On NetBSD, the headers are already okay, except for math.h. --- 778,782 ---- tmake_file=i386/t-freebsd ;; ! i[[34567]]86-*-netbsd*) tm_file=i386/netbsd.h # On NetBSD, the headers are already okay, except for math.h. *************** *** 781,792 **** tmake_file=t-netbsd ;; ! i[[3456]]86-*-coff*) tm_file=i386/i386-coff.h tmake_file=i386/t-i386bare ;; ! i[[3456]]86-*-isc*) # 80386 running ISC system xm_file=i386/xm-isc.h case $machine in ! i[[345]]86-*-isc[[34]]*) xmake_file=i386/x-isc3 ;; --- 784,795 ---- tmake_file=t-netbsd ;; ! i[[34567]]86-*-coff*) tm_file=i386/i386-coff.h tmake_file=i386/t-i386bare ;; ! i[[34567]]86-*-isc*) # 80386 running ISC system xm_file=i386/xm-isc.h case $machine in ! i[[34567]]86-*-isc[[34]]*) xmake_file=i386/x-isc3 ;; *************** *** 808,812 **** broken_install=yes ;; ! i[[3456]]86-*-linux-gnuoldld*) # Intel 80386's running GNU/Linux xm_file=i386/xm-linux.h # with a.out format using pre BFD linkers xmake_file=x-linux-aout --- 811,815 ---- broken_install=yes ;; ! i[[34567]]86-*-linux-gnuoldld*) # Intel 80386's running GNU/Linux xm_file=i386/xm-linux.h # with a.out format using pre BFD linkers xmake_file=x-linux-aout *************** *** 817,821 **** gnu_ld=yes ;; ! i[[3456]]86-*-linux-gnuaout*) # Intel 80386's running GNU/Linux xm_file=i386/xm-linux.h # with a.out format xmake_file=x-linux-aout --- 820,824 ---- gnu_ld=yes ;; ! i[[34567]]86-*-linux-gnuaout*) # Intel 80386's running GNU/Linux xm_file=i386/xm-linux.h # with a.out format xmake_file=x-linux-aout *************** *** 826,830 **** gnu_ld=yes ;; ! i[[3456]]86-*-linux-gnulibc1) xm_file=i386/xm-linux.h # Intel 80386's running GNU/Linux xmake_file=x-linux # with ELF format using the --- 829,833 ---- gnu_ld=yes ;; ! i[[34567]]86-*-linux-gnulibc1) xm_file=i386/xm-linux.h # Intel 80386's running GNU/Linux xmake_file=x-linux # with ELF format using the *************** *** 839,843 **** fi ;; ! i[[3456]]86-*-linux-gnu*) # Intel 80386's running GNU/Linux xm_file=i386/xm-linux.h # with ELF format using glibc 2 xmake_file=x-linux # aka GNU/Linux C library 6 --- 842,846 ---- fi ;; ! i[[34567]]86-*-linux-gnu*) # Intel 80386's running GNU/Linux xm_file=i386/xm-linux.h # with ELF format using glibc 2 xmake_file=x-linux # aka GNU/Linux C library 6 *************** *** 852,863 **** fi ;; ! i[[3456]]86-*-gnu*) ;; ! i[[3456]]86-go32-msdos | i[[3456]]86-*-go32*) xm_file=i386/xm-go32.h tm_file=i386/go32.h tmake_file=i386/t-go32 ;; ! i[[3456]]86-moss-msdos* | i[[3456]]86-*-moss*) tm_file=i386/moss.h tmake_file=t-libc-ok --- 855,873 ---- fi ;; ! i[[34567]]86-*-gnu*) ;; ! i[[34567]]86-go32-msdos | i[[34567]]86-*-go32*) xm_file=i386/xm-go32.h tm_file=i386/go32.h tmake_file=i386/t-go32 ;; ! i[[34567]]86-pc-msdosdjgpp*) ! xm_file=i386/xm-go32.h ! tm_file=i386/go32.h ! tmake_file=i386/t-go32 ! gnu_ld=yes ! gas=yes ! ;; ! i[[34567]]86-moss-msdos* | i[[34567]]86-*-moss*) tm_file=i386/moss.h tmake_file=t-libc-ok *************** *** 866,870 **** gas=yes ;; ! i[[3456]]86-*-lynxos*) if [[ x$gas = xyes ]] then --- 876,880 ---- gas=yes ;; ! i[[34567]]86-*-lynxos*) if [[ x$gas = xyes ]] then *************** *** 877,886 **** xmake_file=x-lynx ;; ! i[[3456]]86-*-mach*) tm_file=i386/mach.h # tmake_file=t-libc-ok use_collect2=yes ;; ! i[[3456]]86-*-osfrose*) # 386 using OSF/rose if [[ x$elf = xyes ]] then --- 887,896 ---- xmake_file=x-lynx ;; ! i[[34567]]86-*-mach*) tm_file=i386/mach.h # tmake_file=t-libc-ok use_collect2=yes ;; ! i[[34567]]86-*-osfrose*) # 386 using OSF/rose if [[ x$elf = xyes ]] then *************** *** 896,900 **** extra_objs=halfpic.o ;; ! i[[345]]86-go32-rtems*) cpu_type=i386 xm_file=i386/xm-go32.h --- 906,910 ---- extra_objs=halfpic.o ;; ! i[[34567]]86-go32-rtems*) cpu_type=i386 xm_file=i386/xm-go32.h *************** *** 902,920 **** tmake_file="i386/t-go32 t-rtems" ;; ! i[[345]]86-*-rtems*) cpu_type=i386 tm_file=i386/rtems.h tmake_file="i386/t-i386bare t-rtems" ;; ! i[[3456]]86-*-sco3.2v5*) # 80386 running SCO Open Server 5 xm_file=i386/xm-sco5.h xmake_file=i386/x-sco5 fixincludes=fixinc.sco broken_install=yes tm_file=i386/sco5.h tmake_file=i386/t-sco5 extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o" ;; ! i[[3456]]86-*-sco3.2v4*) # 80386 running SCO 3.2v4 system xm_file=i386/xm-sco.h xmake_file=i386/x-sco4 --- 912,931 ---- tmake_file="i386/t-go32 t-rtems" ;; ! i[[34567]]86-*-rtems*) cpu_type=i386 tm_file=i386/rtems.h tmake_file="i386/t-i386bare t-rtems" ;; ! i[[34567]]86-*-sco3.2v5*) # 80386 running SCO Open Server 5 xm_file=i386/xm-sco5.h xmake_file=i386/x-sco5 fixincludes=fixinc.sco broken_install=yes + install_headers_dir=install-headers-cpio tm_file=i386/sco5.h tmake_file=i386/t-sco5 extra_parts="crtbegin.o crtend.o crtbeginS.o crtendS.o" ;; ! i[[34567]]86-*-sco3.2v4*) # 80386 running SCO 3.2v4 system xm_file=i386/xm-sco.h xmake_file=i386/x-sco4 *************** *** 934,938 **** truncate_target=yes ;; ! i[[3456]]86-*-sco*) # 80386 running SCO system xm_file=i386/xm-sco.h xmake_file=i386/x-sco --- 945,949 ---- truncate_target=yes ;; ! i[[34567]]86-*-sco*) # 80386 running SCO system xm_file=i386/xm-sco.h xmake_file=i386/x-sco *************** *** 951,955 **** truncate_target=yes ;; ! i[[3456]]86-*-solaris2*) xm_file=i386/xm-sysv4.h if [[ x$stabs = xyes ]] --- 962,966 ---- truncate_target=yes ;; ! i[[34567]]86-*-solaris2*) xm_file=i386/xm-sysv4.h if [[ x$stabs = xyes ]] *************** *** 960,964 **** fi tmake_file=i386/t-sol2 ! extra_parts="crt1.o crti.o crtn.o crtbegin.o crtend.o" xmake_file=x-svr4 fixincludes=fixinc.math --- 971,975 ---- fi tmake_file=i386/t-sol2 ! extra_parts="crt1.o crti.o crtn.o gcrt1.o gmon.o crtbegin.o crtend.o" xmake_file=x-svr4 fixincludes=fixinc.math *************** *** 968,972 **** fi ;; ! i[[3456]]86-*-sysv4*) # Intel 80386's running system V.4 xm_file=i386/xm-sysv4.h tm_file=i386/sysv4.h --- 979,983 ---- fi ;; ! i[[34567]]86-*-sysv4*) # Intel 80386's running system V.4 xm_file=i386/xm-sysv4.h tm_file=i386/sysv4.h *************** *** 979,983 **** extra_parts="crtbegin.o crtend.o" ;; ! i[[3456]]86-*-sysv*) # Intel 80386's running system V xm_file=i386/xm-sysv3.h xmake_file=i386/x-sysv3 --- 990,994 ---- extra_parts="crtbegin.o crtend.o" ;; ! i[[34567]]86-*-sysv*) # Intel 80386's running system V xm_file=i386/xm-sysv3.h xmake_file=i386/x-sysv3 *************** *** 1006,1010 **** xmake_file=i386/x-vsta ;; ! i[[3456]]86-*-pe | i[[3456]]86-*-cygwin32) xm_file="${xm_file} i386/xm-cygwin32.h" tmake_file=i386/t-cygwin32 --- 1017,1021 ---- xmake_file=i386/x-vsta ;; ! i[[34567]]86-*-pe | i[[34567]]86-*-cygwin32) xm_file="${xm_file} i386/xm-cygwin32.h" tmake_file=i386/t-cygwin32 *************** *** 1018,1022 **** exeext=.exe ;; ! i[[3456]]86-*-mingw32) tm_file=i386/mingw32.h xm_file="${xm_file} i386/xm-mingw32.h" --- 1029,1033 ---- exeext=.exe ;; ! i[[34567]]86-*-mingw32*) tm_file=i386/mingw32.h xm_file="${xm_file} i386/xm-mingw32.h" *************** *** 1029,1034 **** fi exeext=.exe ;; ! i[[3456]]86-*-winnt3*) tm_file=i386/win-nt.h out_file=i386/i386.c --- 1040,1052 ---- fi exeext=.exe + case $machine in + *mingw32msv*) + ;; + *minwg32crt* | *mingw32*) + tm_file="${tm_file} i386/crtdll.h" + ;; + esac ;; ! i[[34567]]86-*-winnt3*) tm_file=i386/win-nt.h out_file=i386/i386.c *************** *** 1047,1051 **** fi ;; ! i[[3456]]86-dg-dgux) xm_file=i386/xm-dgux.h out_file=i386/dgux.c --- 1065,1069 ---- fi ;; ! i[[34567]]86-dg-dgux*) xm_file=i386/xm-dgux.h out_file=i386/dgux.c *************** *** 1053,1057 **** tmake_file=i386/t-dgux xmake_file=i386/x-dgux ! fixincludes=fixinc.dgux install_headers_dir=install-headers-cpio ;; --- 1071,1075 ---- tmake_file=i386/t-dgux xmake_file=i386/x-dgux ! fixincludes=Makefile.in # There is nothing to fix install_headers_dir=install-headers-cpio ;; *************** *** 1099,1103 **** use_collect2=yes ;; ! i960-wrs-vxworks5*) tm_file="${tm_file} dbxcoff.h i960/i960-coff.h i960/vx960-coff.h" tmake_file=i960/t-vxworks960 --- 1117,1121 ---- use_collect2=yes ;; ! i960-wrs-vxworks5* | i960-wrs-vxworks) tm_file="${tm_file} dbxcoff.h i960/i960-coff.h i960/vx960-coff.h" tmake_file=i960/t-vxworks960 *************** *** 1761,1765 **** prefix=$native_prefix fi - prefix=$native_prefix ;; mips-sony-bsd* | mips-sony-newsos*) # Sony NEWS 3600 or risc/news. --- 1779,1782 ---- *************** *** 2388,2392 **** ;; sparc-*-solaris2*) ! tm_file=sparc/sol2.h xm_file=sparc/xm-sol2.h tmake_file=sparc/t-sol2 --- 2405,2414 ---- ;; sparc-*-solaris2*) ! if [[ x$gnu_ld = xyes ]] ! then ! tm_file=sparc/sol2.h ! else ! tm_file=sparc/sol2-sld.h ! fi xm_file=sparc/xm-sol2.h tmake_file=sparc/t-sol2 *************** *** 2551,2555 **** esac ! # Distinguish i[3456]86 # Also, do not run mips-tfile on MIPS if using gas. # Process --with-cpu= for PowerPC/rs6000 --- 2573,2577 ---- esac ! # Distinguish i[34567]86 # Also, do not run mips-tfile on MIPS if using gas. # Process --with-cpu= for PowerPC/rs6000 *************** *** 2562,2566 **** target_cpu_default2=2 ;; ! i686-*-*) target_cpu_default2=3 ;; --- 2584,2588 ---- target_cpu_default2=2 ;; ! i686-*-* | i786-*-*) target_cpu_default2=3 ;; *************** *** 2839,2849 **** done ! # Truncate the target if necessary ! if [[ x$host_truncate_target != x ]]; then ! target=`echo $target | sed -e 's/\(..............\).*/\1/'` fi ! # Get the version number from the toplevel ! version=`sed -e 's/.*\"\([[^ \"]]*\)[[ \"]].*/\1/' < ${srcdir}/version.c` # Are we using gcc as the native compiler? --- 2861,2880 ---- done ! # If we have a CVS directory, set up a rule so verion.c will be made ! # from CVS tag information and use a dummy version number here if we ! # don't have version.c. ! ! version_dep= ! if [[ -d $srcdir/CVS ]]; then ! version_dep=ChangeLog fi ! if [[ ! -f $srcdir/version.c -a -d $srcdir/CVS ]] ! then ! version=unknown ! else ! # Get the version number from the toplevel ! version=`sed -e 's/.*\"\([[^ \"]]*\)[[ \"]].*/\1/' < ${srcdir}/version.c` ! fi # Are we using gcc as the native compiler? *************** *** 2892,2901 **** # Otherwise, we can use "CC=$(CC)". rm -f symtest.tem ! if $symbolic_link symtest1.tem symtest.tem 2>/dev/null then cc_set_by_configure="\$(CC)" stage_prefix_set_by_configure="\$(STAGE_PREFIX)" else ! symbolic_link="cp -p" cc_set_by_configure="\`case '\$(CC)' in stage*) echo '\$(CC)' | sed -e 's|stage|../stage|g';; *) echo '\$(CC)';; esac\`" stage_prefix_set_by_configure="\`case '\$(STAGE_PREFIX)' in stage*) echo '\$(STAGE_PREFIX)' | sed -e 's|stage|../stage|g';; *) echo '\$(STAGE_PREFIX)';; esac\`" --- 2923,2938 ---- # Otherwise, we can use "CC=$(CC)". rm -f symtest.tem ! if $symbolic_link $srcdir/gcc.c symtest.tem 2>/dev/null then cc_set_by_configure="\$(CC)" stage_prefix_set_by_configure="\$(STAGE_PREFIX)" else ! rm -f symtest.tem ! if cp -p $srcdir/gcc.c symtest.tem 2>/dev/null ! then ! symbolic_link="cp -p" ! else ! symbolic_link="cp" ! fi cc_set_by_configure="\`case '\$(CC)' in stage*) echo '\$(CC)' | sed -e 's|stage|../stage|g';; *) echo '\$(CC)';; esac\`" stage_prefix_set_by_configure="\`case '\$(STAGE_PREFIX)' in stage*) echo '\$(STAGE_PREFIX)' | sed -e 's|stage|../stage|g';; *) echo '\$(STAGE_PREFIX)';; esac\`" *************** *** 3171,3174 **** --- 3208,3212 ---- AC_SUBST(stage_prefix_set_by_configure) AC_SUBST(symbolic_link) + AC_SUBST(version_dep) AC_SUBST_FILE(target_overrides) *************** *** 3206,3209 **** --- 3244,3252 ---- fi + # Truncate the target if necessary + if [[ x$host_truncate_target != x ]]; then + target=`echo $target | sed -e 's/\(..............\).*/\1/'` + fi + # Configure the subdirectories # AC_CONFIG_SUBDIRS($subdirs) *************** *** 3248,3251 **** --- 3291,3295 ---- oldstyle_subdirs='${oldstyle_subdirs}' symbolic_link='${symbolic_link}' + version_dep='${version_dep}' program_transform_set='${program_transform_set}' program_transform_name='${program_transform_name}' diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/cp/ChangeLog gcc-2.8.1/cp/ChangeLog *** gcc-2.8.0/cp/ChangeLog Mon Dec 22 17:46:16 1997 --- gcc-2.8.1/cp/ChangeLog Sat Feb 14 18:46:23 1998 *************** *** 1,6 **** --- 1,52 ---- + Mon Nov 24 12:15:55 1997 Jason Merrill + + * typeck.c (mark_addressable): Don't assume a FUNCTION_DECL + has DECL_LANG_SPECIFIC. + + Mon Dec 8 23:17:13 1997 Jason Merrill + + * decl.c (copy_args_p): Handle copy elision for types with virtual + bases. + * call.c (build_over_call): Likewise. + + Tue Dec 2 01:37:19 1997 Jason Merrill + + * exception.cc (__cp_pop_exception): Lose handler arg. + * except.c (do_pop_exception): Likewise. + (push_eh_cleanup): Let the cleanup mechanism supply the handler. + (expand_end_catch_block): Likewise. + + Sun Feb 8 23:47:38 1998 scott snyder + + * method.c (make_thunk): Avoid name buffer overflow. + + Fri Feb 6 21:32:25 1998 Richard Kenner + + * config-lang.in (diff_excludes): Use basename only. + + Sun Jan 25 13:20:00 1998 Jason Merrill + + * decl.c (cp_finish_decl): When bailing on a comdat variable, also + unset DECL_NOT_REALLY_EXTERN. + Mon Dec 22 17:46:17 1997 Mark Mitchell * method.c (build_overload_name): Fix mangling for __null. + Sat Dec 20 13:00:30 1997 Jason Merrill + + * pt.c (instantiate_decl): Defer all templates but inline functions. + + Fri Dec 19 09:37:26 1997 Jason Merrill + + * cp-tree.h (struct lang_decl_flags): Add comdat. + (DECL_COMDAT): New macro. + * decl.c (duplicate_decls): Propagate it. + (cp_finish_decl): Handle it. + * decl2.c (import_export_decl): Just set DECL_COMDAT on VAR_DECLs. + + * except.c (expand_start_catch_block): suspend_momentary for the + terminate handler. + Sat Dec 13 09:23:54 1997 Richard Kenner *************** *** 14,21 **** `conversiona'. - Sun Nov 30 08:42:29 1997 Bruno Haible - - * pt.c (do_poplevel): Allow jumps into the block. - Fri Nov 28 12:35:19 1997 Scott Christley --- 60,63 ---- *************** *** 23,31 **** * xref.c: Likewise. ! Thu Nov 27 08:26:56 1997 Jason Merrill ! * except.c (expand_start_catch_block): We only need the rethrow ! region for non-sjlj exceptions. ! (expand_end_catch_block): Likewise. Use outer_context_label_stack. Wed Nov 26 15:13:48 1997 Jeffrey A Law (law@cygnus.com) --- 65,99 ---- * xref.c: Likewise. ! Thu Nov 27 09:39:31 1997 Jason Merrill ! * except.c: Call terminate without caching so many bits. ! ! * class.c: Remove static pending_hard_virtuals. ! (add_virtual_function): Take pointers to pending_virtuals ! and pending_hard_virtuals. ! (finish_struct_1): Pass them. Declare pending_hard_virtuals. ! ! 1997-11-26 Mark Mitchell ! ! * pt.c (unify): Handle `void' template parameters in ! specializations. ! ! Wed Nov 26 20:28:49 1997 Jason Merrill ! ! * rtti.c (build_dynamic_cast): Handle template case here. ! (build_dynamic_cast_1): Not here. ! ! * typeck2.c (digest_init): Make copies where appropriate. ! ! * decl2.c (delete_sanity): resolve_offset_ref. ! ! * except.c (expand_throw): Call mark_used on the destructor. ! ! * except.c (expand_start_catch_block): Fix catching a reference ! to pointer. ! ! Tue Nov 25 11:28:21 1997 Jason Merrill ! ! * init.c (build_new): Copy size to the saveable obstack. Wed Nov 26 15:13:48 1997 Jeffrey A Law (law@cygnus.com) *************** *** 36,39 **** --- 104,110 ---- Mon Nov 24 12:15:55 1997 Jason Merrill + * init.c (build_new): Stick a CLEANUP_POINT_EXPR inside the + TRY_CATCH_EXPR for now. + * exception.cc (struct cp_eh_info): Add handlers field. (__cp_push_exception): Initialize it. *************** *** 44,53 **** --- 115,196 ---- (push_eh_cleanup): Increment handlers. + Fri Nov 21 12:22:07 1997 Jason Merrill + + * except.c (expand_start_catch_block): We only need the rethrow + region for non-sjlj exceptions. + (expand_end_catch_block): Likewise. Use outer_context_label_stack. + + Thu Nov 20 14:40:17 1997 Jason Merrill + + * method.c (build_decl_overload_real): Don't mess with global + placement delete. + + * init.c (build_new): Check for null throw spec, not nothrow_t. + + * decl.c (duplicate_decls): Don't complain about different exceptions + from an internal declaration. + + * call.c (build_op_delete_call): Fix check for member fns again. + + * decl2.c (import_export_decl): Interface hackery affects + virtual synthesized methods. + + Wed Nov 19 18:24:14 1997 Jason Merrill + + * decl.c (start_decl): Don't just complain about a mismatched + scope, fix it. + + * decl.c (make_implicit_typename): Handle case where t is not + actually from context. + * tree.c (get_type_decl): Lose identifier case. + * spew.c (yylex): Lose useless call to identifer_typedecl_value. + * parse.y (nonnested_type): Just use lookup_name. + (complex_type_name): Just use IDENTIFIER_GLOBAL_VALUE. + + Wed Nov 19 10:39:27 1997 Jason Merrill + + * decl.c (make_implicit_typename): New fn. + (lookup_name_real): Use it. Use current_class_type as the context. + + Mon Nov 17 23:42:03 1997 Bruno Haible + + * pt.c (do_poplevel): Don't prohibit jumps into this contour. + Mon Nov 17 02:01:28 1997 Jason Merrill * friend.c (do_friend): Warn about non-template friends in templates. + * call.c (build_op_delete_call): Fix handling of inherited delete. + * search.c (dfs_record_inheritance): Ignore template type parms. + Sat Nov 15 00:30:51 1997 Jason Merrill + + * call.c (build_new_op): Fix copy error. + (build_op_new_call): New fn. + (build_op_delete_call): New fn. + * cp-tree.h: Declare them. + * init.c (build_new): Use them. Support placement delete. + (build_x_delete): Use build_op_delete_call. + (build_delete): Likewise. + * decl2.c (delete_sanity): Likewise. + (coerce_delete_type): Don't complain about placement delete. + + Thu Nov 13 01:52:36 1997 Jason Merrill + + * call.c (build_new_function_call): Remove unused 'obj' parm. + * cp-tree.h, typeck.c: Adjust. + + * init.c (build_new): Make the cleanup last longer. + (expand_vec_init): Call do_pending_stack_adjust. + + Wed Nov 12 11:04:33 1997 Jason Merrill + + * pt.c (do_type_instantiation): Fix typo. + (mark_class_instantiated): If we support one_only but not weak + symbols, don't mark this as known. + + * init.c (build_new): Handle vec delete in EH cleanup. + Wed Nov 12 08:11:55 1997 Benjamin Kosnik *************** *** 55,58 **** --- 198,215 ---- for destructor. + Wed Nov 12 00:48:16 1997 Jason Merrill + + * init.c (build_new): Handle freeing allocated memory when the + constructor throws. + + * call.c (build_new_method_call): Fix flags arg. + + * pt.c (do_type_instantiation): Don't try to instantiate + member templates. + (mark_decl_instantiated): If we support one_only but not + weak symbols, mark this one_only. + * decl2.c (import_export_vtable): Don't defer handling of vtables + if MULTIPLE_SYMBOL_SPACES. + Tue Nov 11 12:02:12 1997 Jason Merrill *************** *** 63,66 **** --- 220,252 ---- * except.c (do_pop_exception): Return a value. + Mon Nov 10 20:25:31 1997 Jason Merrill + + * call.c (build_new_method_call): Handle getting a + TEMPLATE_ID_EXPR around a TEMPLATE_DECL. Don't look for a field + if we got template parms. + * typeck.c (build_x_function_call): Remember the TEMPLATE_ID_EXPR, + not just the args. + * decl2.c (build_expr_from_tree): Tweak last change. + * pt.c (tsubst_copy): Use get_first_fn instead of TREE_VALUE. + (maybe_fold_nontype_arg): Split out from tsubst_copy. + * tree.c (get_first_fn): Just return a TEMPLATE_ID_EXPR. + + Mon Nov 10 20:08:38 1997 Kriang Lerdsuwanakij + + * pt.c (tsubst_copy): Handle explicit template arguments in + function calls. + * typeck.c (build_x_function_call): Likewise. + * decl2.c (build_expr_from_tree): Lookup function name if it + hasn't been done. + + * pt.c (tsubst): Instantiate template functions properly when + template parameter does not appear in function arguments and return + type. + (comp_template_args): Handle member templates required by tsubst. + + Mon Nov 10 20:08:29 1997 Bruno Haible + + * pt.c (coerce_template_parms): Tweak error message. + Mon Nov 10 03:04:20 1997 Jason Merrill *************** *** 119,127 **** 1997-11-01 Brendan Kehoe - * except.c (expand_builtin_throw) [!DWARF2_UNWIND_INFO]: Replace - remaining use of saved_throw_type with a call to get_eh_type. - - 1997-10-31 Brendan Kehoe - * lex.c (FILE_NAME_NONDIRECTORY): Delete macro. (file_name_nondirectory): New function, doing the same as the macro. --- 305,308 ---- *************** *** 134,137 **** --- 315,323 ---- * xref.c (open_xref_file): Likewise. * error.c (dump_char): Make its arg int, not char. + + * except.c (expand_builtin_throw) [!DWARF2_UNWIND_INFO]: Replace + remaining use of saved_throw_type with a call to get_eh_type. + + 1997-10-31 Brendan Kehoe * except.c (push_eh_info): Pass the number of fields - 1 down, not diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/cp/NEWS gcc-2.8.1/cp/NEWS *** gcc-2.8.0/cp/NEWS Sat Nov 8 18:27:11 1997 --- gcc-2.8.1/cp/NEWS Sat Feb 14 18:24:07 1998 *************** *** 1,6 **** *** Changes since G++ version 2.7.2: ! * A public review copy of the December 1996 Draft of the ANSI/ISO C++ ! proto-standard is now available. See http://www.cygnus.com/misc/wp/ --- 1,6 ---- *** Changes since G++ version 2.7.2: ! * A public review copy of the December 1996 Draft of the ISO/ANSI C++ ! standard is now available. See http://www.cygnus.com/misc/wp/ *************** *** 66,71 **** * Exception handling support has been significantly improved and is on by ! default. This can result in significant runtime overhead. You can turn ! it off with -fno-exceptions. * RTTI support has been rewritten to work properly and is now on by default. --- 66,80 ---- * Exception handling support has been significantly improved and is on by ! default. The compiler supports two mechanisms for walking back up the ! call stack; one relies on static information about how registers are ! saved, and causes no runtime overhead for code that does not throw ! exceptions. The other mechanism uses setjmp and longjmp equivalents, and ! can result in quite a bit of runtime overhead. You can determine which ! mechanism is the default for your target by compiling a testcase that ! uses exceptions and doing an 'nm' on the object file; if it uses __throw, ! it's using the first mechanism. If it uses __sjthrow, it's using the ! second. ! ! You can turn EH support off with -fno-exceptions. * RTTI support has been rewritten to work properly and is now on by default. *************** *** 91,97 **** * New flags: ! + New flags -Wsign-promo (warn about potentially confusing promotions ! in overload resolution), -Wno-pmf-conversion (don't warn about ! converting from a bound member function pointer to function pointer). + A flag -Weffc++ has been added for violations of some of the style --- 100,106 ---- * New flags: ! + New warning -Wno-pmf-conversion (don't warn about ! converting from a bound member function pointer to function ! pointer). + A flag -Weffc++ has been added for violations of some of the style *************** *** 146,150 **** refers to A. ! * Local classes are now supported. * __attribute__ can now be attached to types as well as declarations. --- 155,159 ---- refers to A. ! * Local classes are now supported, though not inside templates. * __attribute__ can now be attached to types as well as declarations. diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/cp/call.c gcc-2.8.1/cp/call.c *** gcc-2.8.0/cp/call.c Tue Nov 25 15:21:00 1997 --- gcc-2.8.1/cp/call.c Sat Feb 14 18:24:10 1998 *************** *** 1,6 **** /* Functions related to invoking methods and overloaded functions. ! Copyright (C) 1987, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) and ! hacked by Brendan Kehoe (brendan@cygnus.com). This file is part of GNU CC. --- 1,6 ---- /* Functions related to invoking methods and overloaded functions. ! Copyright (C) 1987, 92-97, 1998 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) and ! modified by Brendan Kehoe (brendan@cygnus.com). This file is part of GNU CC. *************** *** 4480,4485 **** tree ! build_new_function_call (fn, args, obj) ! tree fn, args, obj; { struct z_candidate *candidates = 0, *cand; --- 4480,4485 ---- tree ! build_new_function_call (fn, args) ! tree fn, args; { struct z_candidate *candidates = 0, *cand; *************** *** 4494,4498 **** } ! if (obj == NULL_TREE && really_overloaded_fn (fn)) { tree t; --- 4494,4498 ---- } ! if (really_overloaded_fn (fn)) { tree t; *************** *** 4722,4726 **** if (flags & LOOKUP_GLOBAL) return build_new_function_call ! (lookup_name_nonclass (fnname), arglist, NULL_TREE); /* FIXME */ --- 4722,4726 ---- if (flags & LOOKUP_GLOBAL) return build_new_function_call ! (lookup_name_nonclass (fnname), arglist); /* FIXME */ *************** *** 4747,4751 **** return build_new_function_call (lookup_name_nonclass (fnname), ! build_scratch_list (NULL_TREE, arg1), NULL_TREE); arglist = scratch_tree_cons (NULL_TREE, arg1, build_scratch_list (NULL_TREE, arg2)); --- 4747,4751 ---- return build_new_function_call (lookup_name_nonclass (fnname), ! build_scratch_list (NULL_TREE, arg1)); arglist = scratch_tree_cons (NULL_TREE, arg1, build_scratch_list (NULL_TREE, arg2)); *************** *** 4811,4817 **** arg2 = integer_zero_node; - fns = lookup_name_nonclass (fnname); - /* + Koenig lookup */ - if (arg2 && arg3) arglist = scratch_tree_cons (NULL_TREE, arg1, scratch_tree_cons --- 4811,4814 ---- *************** *** 4822,4825 **** --- 4819,4825 ---- arglist = build_scratch_list (NULL_TREE, arg1); + fns = lookup_name_nonclass (fnname); + /* + Koenig lookup */ + if (fns && TREE_CODE (fns) == TREE_LIST) fns = TREE_VALUE (fns); *************** *** 4862,4867 **** candidates = add_template_candidate (candidates, fn, NULL_TREE, ! this_arglist, TREE_TYPE ! (fnname), LOOKUP_NORMAL); } else --- 4862,4867 ---- candidates = add_template_candidate (candidates, fn, NULL_TREE, ! this_arglist, TREE_TYPE (fnname), ! flags); } else *************** *** 5072,5075 **** --- 5072,5214 ---- } + /* Build up a call to operator new. This has to be handled differently + from other operators in the way lookup is handled; first members are + considered, then globals. CODE is either NEW_EXPR or VEC_NEW_EXPR. + TYPE is the type to be created. ARGS are any new-placement args. + FLAGS are the usual overloading flags. */ + + tree + build_op_new_call (code, type, args, flags) + enum tree_code code; + tree type, args; + int flags; + { + tree fnname = ansi_opname[code]; + + if (IS_AGGR_TYPE (type) && ! (flags & LOOKUP_GLOBAL) + && (TYPE_GETS_NEW (type) & (1 << (code == VEC_NEW_EXPR)))) + { + tree dummy = build1 (NOP_EXPR, build_pointer_type (type), + error_mark_node); + dummy = build_indirect_ref (dummy, "new"); + return build_method_call (dummy, fnname, args, NULL_TREE, flags); + } + else + return build_new_function_call (lookup_name_nonclass (fnname), args); + } + + /* Build a call to operator delete. This has to be handled very specially, + because the restrictions on what signatures match are different from all + other call instances. For a normal delete, only a delete taking (void *) + or (void *, size_t) is accepted. For a placement delete, only an exact + match with the placement new is accepted. + + CODE is either DELETE_EXPR or VEC_DELETE_EXPR. + ADDR is the pointer to be deleted. For placement delete, it is also + used to determine what the corresponding new looked like. + SIZE is the size of the memory block to be deleted. + FLAGS are the usual overloading flags. */ + + tree + build_op_delete_call (code, addr, size, flags) + enum tree_code code; + tree addr, size; + int flags; + { + tree fn, fns, fnname, fntype, argtypes, args, type; + int placement; + + if (addr == error_mark_node) + return error_mark_node; + + type = TREE_TYPE (TREE_TYPE (addr)); + fnname = ansi_opname[code]; + + if (IS_AGGR_TYPE (type) && ! (flags & LOOKUP_GLOBAL)) + fns = lookup_fnfields (TYPE_BINFO (type), fnname, 0); + else + fns = NULL_TREE; + + if (fns) + { + /* Build this up like build_offset_ref does. */ + fns = build_tree_list (error_mark_node, fns); + TREE_TYPE (fns) = build_offset_type (type, unknown_type_node); + } + else + fns = lookup_name_nonclass (fnname); + + /* We can recognize a placement delete because of LOOKUP_SPECULATIVELY; + if we are doing placement delete we do nothing if we don't find a + matching op delete. */ + placement = !!(flags & LOOKUP_SPECULATIVELY); + if (placement) + { + /* If placement, we are coming from build_new, and we know that addr + is the allocation expression, so extract the info we need from it. + Obviously, if the build_new process changes this may have to + change as well. */ + /* The SAVE_EXPR. */ + tree t = TREE_OPERAND (addr, 0); + /* The CALL_EXPR. */ + t = TREE_OPERAND (t, 0); + /* The function. */ + argtypes = TREE_OPERAND (TREE_OPERAND (t, 0), 0); + /* The second parm type. */ + argtypes = TREE_CHAIN (TYPE_ARG_TYPES (TREE_TYPE (argtypes))); + /* The second argument. */ + args = TREE_CHAIN (TREE_OPERAND (t, 1)); + } + else + { + /* First try it without the size argument. */ + argtypes = void_list_node; + args = NULL_TREE; + } + + argtypes = tree_cons (NULL_TREE, ptr_type_node, argtypes); + fntype = build_function_type (void_type_node, argtypes); + + /* Strip const and volatile from addr. */ + if (type != TYPE_MAIN_VARIANT (type)) + addr = cp_convert (build_pointer_type (TYPE_MAIN_VARIANT (type)), addr); + + /* instantiate_type will always return a plain function; pretend it's + overloaded. */ + if (TREE_CODE (fns) == FUNCTION_DECL) + fns = scratch_tree_cons (NULL_TREE, fns, NULL_TREE); + + fn = instantiate_type (fntype, fns, 0); + + if (fn != error_mark_node) + { + if (TREE_CODE (TREE_VALUE (fns)) == TREE_LIST) + /* Member functions. */ + enforce_access (TREE_PURPOSE (TREE_VALUE (fns)), fn); + return build_function_call (fn, expr_tree_cons (NULL_TREE, addr, args)); + } + + if (placement) + return NULL_TREE; + + /* Normal delete; now try to find a match including the size argument. */ + argtypes = tree_cons (NULL_TREE, ptr_type_node, + tree_cons (NULL_TREE, sizetype, void_list_node)); + fntype = build_function_type (void_type_node, argtypes); + + fn = instantiate_type (fntype, fns, 0); + + if (fn != error_mark_node) + return build_function_call + (fn, expr_tree_cons (NULL_TREE, addr, + build_expr_list (NULL_TREE, size))); + + cp_error ("no suitable operator delete for `%T'", type); + return error_mark_node; + } + + /* If the current scope isn't allowed to access FUNCTION along + BASETYPE_PATH, give an error. */ + static void enforce_access (basetype_path, function) *************** *** 5360,5364 **** { tree targ; ! arg = TREE_VALUE (TREE_CHAIN (converted_args)); /* Pull out the real argument, disregarding const-correctness. */ --- 5499,5506 ---- { tree targ; ! arg = TREE_CHAIN (converted_args); ! if (TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (fn))) ! arg = TREE_CHAIN (arg); ! arg = TREE_VALUE (arg); /* Pull out the real argument, disregarding const-correctness. */ *************** *** 5475,5478 **** --- 5617,5622 ---- explicit_targs = TREE_OPERAND (name, 1); name = TREE_OPERAND (name, 0); + if (TREE_CODE (name) == TEMPLATE_DECL) + name = DECL_NAME (name); template_only = 1; } *************** *** 5527,5534 **** instance_ptr = build_this (instance); ! /* XXX this should be handled before we get here. */ ! fns = build_field_call (basetype_path, instance_ptr, name, args); ! if (fns) ! return fns; } else --- 5671,5681 ---- instance_ptr = build_this (instance); ! if (! template_only) ! { ! /* XXX this should be handled before we get here. */ ! fns = build_field_call (basetype_path, instance_ptr, name, args); ! if (fns) ! return fns; ! } } else *************** *** 5576,5581 **** add_template_candidate (candidates, t, explicit_targs, this_arglist, ! TREE_TYPE (name), ! LOOKUP_NORMAL); } else if (! template_only) --- 5723,5727 ---- add_template_candidate (candidates, t, explicit_targs, this_arglist, ! TREE_TYPE (name), flags); } else if (! template_only) diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/cp/class.c gcc-2.8.1/cp/class.c *** gcc-2.8.0/cp/class.c Wed Dec 3 08:37:28 1997 --- gcc-2.8.1/cp/class.c Sat Feb 14 18:24:12 1998 *************** *** 104,108 **** static void modify_vtable_entry PROTO((tree, tree, tree)); static tree get_vtable_entry_n PROTO((tree, unsigned HOST_WIDE_INT)); ! static tree add_virtual_function PROTO((tree, int *, tree, tree)); static tree delete_duplicate_fields_1 PROTO((tree, tree)); static void delete_duplicate_fields PROTO((tree)); --- 104,108 ---- static void modify_vtable_entry PROTO((tree, tree, tree)); static tree get_vtable_entry_n PROTO((tree, unsigned HOST_WIDE_INT)); ! static void add_virtual_function PROTO((tree *, tree *, int *, tree, tree)); static tree delete_duplicate_fields_1 PROTO((tree, tree)); static void delete_duplicate_fields PROTO((tree)); *************** *** 417,425 **** /* Virtual function things. */ - /* Virtual functions to be dealt with after laying out our base - classes. We do all overrides after we layout virtual base classes. */ - - static tree pending_hard_virtuals; - /* Build an entry in the virtual function table. DELTA is the offset for the `this' pointer. --- 417,420 ---- *************** *** 954,964 **** and return it. */ ! static tree ! add_virtual_function (pending_virtuals, has_virtual, fndecl, t) ! tree pending_virtuals; int *has_virtual; tree fndecl; tree t; /* Structure type. */ { /* FUNCTION_TYPEs and OFFSET_TYPEs no longer freely convert to void *. Make such a conversion here. */ --- 949,962 ---- and return it. */ ! static void ! add_virtual_function (pv, phv, has_virtual, fndecl, t) ! tree *pv, *phv; int *has_virtual; tree fndecl; tree t; /* Structure type. */ { + tree pending_virtuals = *pv; + tree pending_hard_virtuals = *phv; + /* FUNCTION_TYPEs and OFFSET_TYPEs no longer freely convert to void *. Make such a conversion here. */ *************** *** 1024,1028 **** pending_hard_virtuals = temp_tree_cons (fndecl, vfn, pending_hard_virtuals); } ! return pending_virtuals; } --- 1022,1027 ---- pending_hard_virtuals = temp_tree_cons (fndecl, vfn, pending_hard_virtuals); } ! *pv = pending_virtuals; ! *phv = pending_hard_virtuals; } *************** *** 3110,3113 **** --- 3109,3113 ---- int max_has_virtual; tree pending_virtuals = NULL_TREE; + tree pending_hard_virtuals = NULL_TREE; tree abstract_virtuals = NULL_TREE; tree vfield; *************** *** 3276,3281 **** || (all_virtual == 1 && ! DECL_CONSTRUCTOR_P (x))) { ! pending_virtuals = add_virtual_function (pending_virtuals, ! &has_virtual, x, t); if (DECL_ABSTRACT_VIRTUAL_P (x)) abstract_virtuals = tree_cons (NULL_TREE, x, abstract_virtuals); --- 3276,3281 ---- || (all_virtual == 1 && ! DECL_CONSTRUCTOR_P (x))) { ! add_virtual_function (&pending_virtuals, &pending_hard_virtuals, ! &has_virtual, x, t); if (DECL_ABSTRACT_VIRTUAL_P (x)) abstract_virtuals = tree_cons (NULL_TREE, x, abstract_virtuals); *************** *** 3664,3669 **** if (DECL_VINDEX (dtor)) ! pending_virtuals = add_virtual_function (pending_virtuals, ! &has_virtual, dtor, t); nonprivate_method = 1; } --- 3664,3669 ---- if (DECL_VINDEX (dtor)) ! add_virtual_function (&pending_virtuals, &pending_hard_virtuals, ! &has_virtual, dtor, t); nonprivate_method = 1; } diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/cp/config-lang.in gcc-2.8.1/cp/config-lang.in *** gcc-2.8.0/cp/config-lang.in Tue Sep 16 16:30:45 1997 --- gcc-2.8.1/cp/config-lang.in Sat Feb 14 18:24:12 1998 *************** *** 33,37 **** stagestuff="g++\$(exeext) g++-cross\$(exeext) cc1plus\$(exeext)" ! diff_excludes="-x cp/parse.c -x cp/parse.h" headers='$(CXX_EXTRA_HEADERS)' --- 33,37 ---- stagestuff="g++\$(exeext) g++-cross\$(exeext) cc1plus\$(exeext)" ! diff_excludes="-x parse.c -x parse.h" headers='$(CXX_EXTRA_HEADERS)' diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/cp/cp-tree.h gcc-2.8.1/cp/cp-tree.h *** gcc-2.8.0/cp/cp-tree.h Tue Nov 18 03:17:37 1997 --- gcc-2.8.1/cp/cp-tree.h Sat Feb 14 18:24:14 1998 *************** *** 944,948 **** unsigned declared_inline : 1; unsigned not_really_extern : 1; ! unsigned dummy : 5; tree access; --- 944,949 ---- unsigned declared_inline : 1; unsigned not_really_extern : 1; ! unsigned comdat : 1; ! unsigned dummy : 4; tree access; *************** *** 1421,1424 **** --- 1422,1429 ---- (DECL_EXTERNAL (NODE) && ! DECL_NOT_REALLY_EXTERN (NODE)) + /* Used to tell cp_finish_decl that it should approximate comdat linkage + as best it can for this decl. */ + #define DECL_COMDAT(NODE) (DECL_LANG_SPECIFIC (NODE)->decl_flags.comdat) + #define THUNK_DELTA(DECL) ((DECL)->decl.frame_size.i) *************** *** 1956,1961 **** extern tree type_decays_to PROTO((tree)); extern tree build_user_type_conversion PROTO((tree, tree, int)); ! extern tree build_new_function_call PROTO((tree, tree, tree)); extern tree build_new_op PROTO((enum tree_code, int, tree, tree, tree)); extern int can_convert PROTO((tree, tree)); extern int can_convert_arg PROTO((tree, tree, tree)); --- 1961,1968 ---- extern tree type_decays_to PROTO((tree)); extern tree build_user_type_conversion PROTO((tree, tree, int)); ! extern tree build_new_function_call PROTO((tree, tree)); extern tree build_new_op PROTO((enum tree_code, int, tree, tree, tree)); + extern tree build_op_new_call PROTO((enum tree_code, tree, tree, int)); + extern tree build_op_delete_call PROTO((enum tree_code, tree, tree, int)); extern int can_convert PROTO((tree, tree)); extern int can_convert_arg PROTO((tree, tree, tree)); diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/cp/decl.c gcc-2.8.1/cp/decl.c *** gcc-2.8.0/cp/decl.c Fri Dec 5 07:09:48 1997 --- gcc-2.8.1/cp/decl.c Sat Feb 14 18:24:19 1998 *************** *** 1,5 **** /* Process declarations and variables for C compiler. ! Copyright (C) 1988, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. ! Hacked by Michael Tiemann (tiemann@cygnus.com) This file is part of GNU CC. --- 1,5 ---- /* Process declarations and variables for C compiler. ! Copyright (C) 1988, 92-97, 1998 Free Software Foundation, Inc. ! Contributed by Michael Tiemann (tiemann@cygnus.com) This file is part of GNU CC. *************** *** 2780,2784 **** TYPE_RAISES_EXCEPTIONS (oldtype)); ! if ((pedantic || ! DECL_IN_SYSTEM_HEADER (olddecl)) && flag_exceptions && ! compexcepttypes (TREE_TYPE (newdecl), TREE_TYPE (olddecl))) --- 2780,2785 ---- TYPE_RAISES_EXCEPTIONS (oldtype)); ! if ((pedantic || (! DECL_IN_SYSTEM_HEADER (olddecl) ! && DECL_SOURCE_LINE (olddecl) != 0)) && flag_exceptions && ! compexcepttypes (TREE_TYPE (newdecl), TREE_TYPE (olddecl))) *************** *** 2863,2866 **** --- 2864,2868 ---- DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl); DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl); + DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl); } *************** *** 4383,4386 **** --- 4385,4426 ---- } + /* Given a TYPE_DECL T looked up in CONTEXT, return a TYPENAME_TYPE + where the scope is either CONTEXT or the first base of CONTEXT along the + inheritance chain to T that depends on template parameters. + + Called from lookup_name_real to implement the implicit typename + extension. */ + + static tree + make_implicit_typename (context, t) + tree context, t; + { + tree retval; + + if (uses_template_parms (DECL_CONTEXT (t)) + && DECL_CONTEXT (t) != context) + { + tree binfo = get_binfo (DECL_CONTEXT (t), context, 0); + while (binfo) + { + tree next = BINFO_INHERITANCE_CHAIN (binfo); + if (! uses_template_parms (BINFO_TYPE (next)) + || BINFO_TYPE (next) == context) + break; + binfo = next; + } + if (binfo) + retval = make_typename_type (BINFO_TYPE (binfo), DECL_NAME (t)); + else + /* FIXME: find the enclosing class whose base t comes from. */ + retval = make_typename_type (DECL_CONTEXT (t), DECL_NAME (t)); + } + else + retval = make_typename_type (context, DECL_NAME (t)); + + TREE_TYPE (retval) = TREE_TYPE (t); + return retval; + } + /* Look up NAME in the current binding level and its superiors in the namespace of variables, functions and typedefs. Return a ..._DECL *************** *** 4475,4480 **** && ! DECL_ARTIFICIAL (val)) { ! tree t = make_typename_type (got_scope, DECL_NAME (val)); ! TREE_TYPE (t) = TREE_TYPE (val); val = TYPE_MAIN_DECL (t); } --- 4515,4519 ---- && ! DECL_ARTIFICIAL (val)) { ! tree t = make_implicit_typename (got_scope, val); val = TYPE_MAIN_DECL (t); } *************** *** 4516,4522 **** && ! DECL_ARTIFICIAL (classval)) { ! tree t = make_typename_type (DECL_CONTEXT (classval), ! DECL_NAME (classval)); ! TREE_TYPE (t) = TREE_TYPE (classval); classval = TYPE_MAIN_DECL (t); } --- 4555,4559 ---- && ! DECL_ARTIFICIAL (classval)) { ! tree t = make_implicit_typename (current_class_type, classval); classval = TYPE_MAIN_DECL (t); } *************** *** 5985,5989 **** { if (DECL_CONTEXT (field) != context) ! cp_pedwarn ("ANSI C++ does not permit `%T::%D' to be defined as `%T::%D'", DECL_CONTEXT (field), DECL_NAME (decl), context, DECL_NAME (decl)); if (duplicate_decls (decl, field)) decl = field; --- 6022,6031 ---- { if (DECL_CONTEXT (field) != context) ! { ! cp_pedwarn ("ANSI C++ does not permit `%T::%D' to be defined as `%T::%D'", ! DECL_CONTEXT (field), DECL_NAME (decl), ! context, DECL_NAME (decl)); ! DECL_CONTEXT (decl) = DECL_CONTEXT (field); ! } if (duplicate_decls (decl, field)) decl = field; *************** *** 6686,6689 **** --- 6728,6760 ---- } + else if (TREE_CODE (decl) == VAR_DECL + && DECL_LANG_SPECIFIC (decl) + && DECL_COMDAT (decl)) + { + /* Dynamically initialized vars go into common. */ + if (DECL_INITIAL (decl) == NULL_TREE + || DECL_INITIAL (decl) == error_mark_node) + DECL_COMMON (decl) = 1; + else if (EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))) + { + DECL_COMMON (decl) = 1; + DECL_INITIAL (decl) = error_mark_node; + } + else + { + /* Statically initialized vars are weak or comdat, if + supported. */ + if (flag_weak) + make_decl_one_only (decl); + else + { + /* we can't do anything useful; leave vars for explicit + instantiation. */ + DECL_EXTERNAL (decl) = 1; + DECL_NOT_REALLY_EXTERN (decl) = 0; + } + } + } + if (TREE_CODE (decl) == VAR_DECL && DECL_VIRTUAL_P (decl)) make_decl_rtl (decl, NULL_PTR, toplev); *************** *** 10214,10217 **** --- 10285,10291 ---- { tree t = FUNCTION_ARG_CHAIN (d); + if (DECL_CONSTRUCTOR_P (d) + && TYPE_USES_VIRTUAL_BASECLASSES (DECL_CONTEXT (d))) + t = TREE_CHAIN (t); if (t && TREE_CODE (TREE_VALUE (t)) == REFERENCE_TYPE && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_VALUE (t))) diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/cp/decl2.c gcc-2.8.1/cp/decl2.c *** gcc-2.8.0/cp/decl2.c Fri Nov 21 15:43:48 1997 --- gcc-2.8.1/cp/decl2.c Sat Feb 14 18:24:21 1998 *************** *** 1243,1247 **** } ! t = stabilize_reference (convert_from_reference (exp)); type = TREE_TYPE (t); code = TREE_CODE (type); --- 1243,1250 ---- } ! t = exp; ! if (TREE_CODE (t) == OFFSET_REF) ! t = resolve_offset_ref (t); ! t = stabilize_reference (convert_from_reference (t)); type = TREE_TYPE (t); code = TREE_CODE (type); *************** *** 1271,1276 **** { #if 0 ! /* As of Valley Forge, you can delete a pointer to constant. */ ! /* You can't delete a pointer to constant. */ if (TREE_READONLY (TREE_TYPE (type))) { --- 1274,1278 ---- { #if 0 ! /* As of Valley Forge, you can delete a pointer to const. */ if (TREE_READONLY (TREE_TYPE (type))) { *************** *** 1279,1283 **** } #endif ! /* You also can't delete functions. */ if (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE) { --- 1281,1285 ---- } #endif ! /* You can't delete functions. */ if (TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE) { *************** *** 1311,1316 **** /* Only do access checking here; we'll be calling op delete from the destructor. */ ! tree tmp = build_opfncall (DELETE_EXPR, LOOKUP_NORMAL, t, ! size_zero_node, NULL_TREE); if (tmp == error_mark_node) return error_mark_node; --- 1313,1318 ---- /* Only do access checking here; we'll be calling op delete from the destructor. */ ! tree tmp = build_op_delete_call (DELETE_EXPR, t, ! size_zero_node, LOOKUP_NORMAL); if (tmp == error_mark_node) return error_mark_node; *************** *** 2404,2407 **** --- 2406,2410 ---- e2 = 1, error ("`operator delete' takes type `void *' as first parameter"); + #if 0 if (arg_types && TREE_CHAIN (arg_types) *************** *** 2435,2440 **** } else e3 |= e1; ! if (e3) type = build_function_type (void_type_node, arg_types); --- 2438,2447 ---- } else e3 |= e1; + #endif ! if (e2) ! arg_types = tree_cons (NULL_TREE, ptr_type_node, ! arg_types ? TREE_CHAIN (arg_types): NULL_TREE); ! if (e2 || e1) type = build_function_type (void_type_node, arg_types); *************** *** 2529,2532 **** --- 2536,2540 ---- int found = CLASSTYPE_TEMPLATE_INSTANTIATION (type); + #ifndef MULTIPLE_SYMBOL_SPACES if (! found && ! final) { *************** *** 2542,2545 **** --- 2550,2554 ---- } } + #endif if (final || ! found) *************** *** 2760,2783 **** if (TREE_CODE (decl) == FUNCTION_DECL) comdat_linkage (decl); - /* Dynamically initialized vars go into common. */ - else if (DECL_INITIAL (decl) == NULL_TREE - || DECL_INITIAL (decl) == error_mark_node) - DECL_COMMON (decl) = 1; - else if (EMPTY_CONSTRUCTOR_P (DECL_INITIAL (decl))) - { - DECL_COMMON (decl) = 1; - DECL_INITIAL (decl) = error_mark_node; - } else ! { ! /* Statically initialized vars are weak or comdat, if ! supported. */ ! if (flag_weak) ! make_decl_one_only (decl); ! else ! /* we can't do anything useful; leave vars for explicit ! instantiation. */ ! DECL_NOT_REALLY_EXTERN (decl) = 0; ! } } else --- 2769,2774 ---- if (TREE_CODE (decl) == FUNCTION_DECL) comdat_linkage (decl); else ! DECL_COMDAT (decl) = 1; } else *************** *** 2787,2791 **** { tree ctype = DECL_CLASS_CONTEXT (decl); ! if (CLASSTYPE_INTERFACE_KNOWN (ctype) && ! DECL_ARTIFICIAL (decl)) { DECL_NOT_REALLY_EXTERN (decl) --- 2778,2783 ---- { tree ctype = DECL_CLASS_CONTEXT (decl); ! if (CLASSTYPE_INTERFACE_KNOWN (ctype) ! && (! DECL_ARTIFICIAL (decl) || DECL_VINDEX (decl))) { DECL_NOT_REALLY_EXTERN (decl) *************** *** 3407,3414 **** case TEMPLATE_ID_EXPR: ! return lookup_template_function (build_expr_from_tree ! (TREE_OPERAND (t, 0)), ! build_expr_from_tree ! (TREE_OPERAND (t, 1))); case INDIRECT_REF: --- 3399,3405 ---- case TEMPLATE_ID_EXPR: ! return (lookup_template_function ! (build_expr_from_tree (TREE_OPERAND (t, 0)), ! build_expr_from_tree (TREE_OPERAND (t, 1)))); case INDIRECT_REF: *************** *** 3569,3573 **** { tree name = TREE_OPERAND (t, 0); ! if (! really_overloaded_fn (name)) name = build_expr_from_tree (name); return build_x_function_call --- 3560,3565 ---- { tree name = TREE_OPERAND (t, 0); ! if (TREE_CODE (name) == TEMPLATE_ID_EXPR ! || ! really_overloaded_fn (name)) name = build_expr_from_tree (name); return build_x_function_call diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/cp/except.c gcc-2.8.1/cp/except.c *** gcc-2.8.0/cp/except.c Wed Dec 3 08:12:08 1997 --- gcc-2.8.1/cp/except.c Sat Feb 14 18:24:22 1998 *************** *** 1,4 **** /* Handle exceptional things in C++. ! Copyright (C) 1989, 92-96, 1997 Free Software Foundation, Inc. Contributed by Michael Tiemann Rewritten by Mike Stump , based upon an --- 1,4 ---- /* Handle exceptional things in C++. ! Copyright (C) 1989, 92-97, 1998 Free Software Foundation, Inc. Contributed by Michael Tiemann Rewritten by Mike Stump , based upon an *************** *** 178,184 **** static tree Unwind; - /* Holds a ready to emit call to "terminate". */ - static tree TerminateFunctionCall; - /* ====================================================================== */ --- 178,181 ---- *************** *** 283,287 **** Unexpected = default_conversion (unexpected_fndecl); ! Terminate = default_conversion (terminate_fndecl); SetTerminate = default_conversion (set_terminate_fndecl); SetUnexpected = default_conversion (set_unexpected_fndecl); --- 280,284 ---- Unexpected = default_conversion (unexpected_fndecl); ! Terminate = terminate_fndecl; SetTerminate = default_conversion (set_terminate_fndecl); SetUnexpected = default_conversion (set_unexpected_fndecl); *************** *** 291,296 **** BuiltinReturnAddress = default_conversion (builtin_return_address_fndecl); - TerminateFunctionCall = build_function_call (Terminate, NULL_TREE); - pop_lang_context (); --- 288,291 ---- *************** *** 480,485 **** static tree ! do_pop_exception (handler) ! tree handler; { tree fn, cleanup; --- 475,479 ---- static tree ! do_pop_exception () { tree fn, cleanup; *************** *** 496,502 **** (FUNCTION_DECL, fn, build_function_type (void_type_node, tree_cons ! (NULL_TREE, ptr_type_node, tree_cons ! (NULL_TREE, boolean_type_node, ! void_list_node)))); DECL_EXTERNAL (fn) = 1; TREE_PUBLIC (fn) = 1; --- 490,494 ---- (FUNCTION_DECL, fn, build_function_type (void_type_node, tree_cons ! (NULL_TREE, ptr_type_node, void_list_node))); DECL_EXTERNAL (fn) = 1; TREE_PUBLIC (fn) = 1; *************** *** 511,516 **** cleanup = lookup_name (get_identifier ("__exception_info"), 0); cleanup = build_function_call (fn, expr_tree_cons ! (NULL_TREE, cleanup, expr_tree_cons ! (NULL_TREE, handler, NULL_TREE))); return cleanup; } --- 503,507 ---- cleanup = lookup_name (get_identifier ("__exception_info"), 0); cleanup = build_function_call (fn, expr_tree_cons ! (NULL_TREE, cleanup, NULL_TREE)); return cleanup; } *************** *** 521,535 **** push_eh_cleanup () { ! /* All cleanups must last longer than normal. */ ! int yes = suspend_momentary (); ! expand_decl_cleanup_no_eh (NULL_TREE, do_pop_exception (boolean_false_node)); ! resume_momentary (yes); expand_expr (build_unary_op (PREINCREMENT_EXPR, get_eh_handlers (), 1), const0_rtx, VOIDmode, EXPAND_NORMAL); ! /* We don't destroy the exception object on rethrow, so we can't use ! the normal cleanup mechanism for it. */ ! expand_eh_region_start (); } --- 512,524 ---- push_eh_cleanup () { ! int yes; expand_expr (build_unary_op (PREINCREMENT_EXPR, get_eh_handlers (), 1), const0_rtx, VOIDmode, EXPAND_NORMAL); ! yes = suspend_momentary (); ! /* All cleanups must last longer than normal. */ ! expand_decl_cleanup (NULL_TREE, do_pop_exception ()); ! resume_momentary (yes); } *************** *** 614,617 **** --- 603,613 ---- exp = get_eh_value (); + + /* Since pointers are passed by value, initialize a reference to + pointer catch parm with the address of the value slot. */ + if (TREE_CODE (init_type) == REFERENCE_TYPE + && TREE_CODE (TREE_TYPE (init_type)) == POINTER_TYPE) + exp = build_unary_op (ADDR_EXPR, exp, 1); + exp = expr_tree_cons (NULL_TREE, build_eh_type_type (TREE_TYPE (decl)), *************** *** 644,653 **** if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))) { /* Generate the copy constructor call directly so we can wrap it. See also expand_default_init. */ init = ocp_convert (TREE_TYPE (decl), init, CONV_IMPLICIT|CONV_FORCE_TEMP, 0); ! init = build (TRY_CATCH_EXPR, TREE_TYPE (init), init, ! TerminateFunctionCall); } --- 640,652 ---- if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (decl))) { + int yes = suspend_momentary (); + tree term = build_function_call (Terminate, NULL_TREE); + resume_momentary (yes); + /* Generate the copy constructor call directly so we can wrap it. See also expand_default_init. */ init = ocp_convert (TREE_TYPE (decl), init, CONV_IMPLICIT|CONV_FORCE_TEMP, 0); ! init = build (TRY_CATCH_EXPR, TREE_TYPE (init), init, term); } *************** *** 691,697 **** poplevel (kept_level_p (), 1, 0); - /* Matches push_eh_cleanup. */ - expand_eh_region_end (do_pop_exception (boolean_true_node)); - /* Cleanup the EH object. */ expand_end_bindings (getdecls (), kept_level_p (), 0); --- 690,693 ---- *************** *** 989,993 **** emit_label (gotta_call_terminate); do_function_call (Terminate, NULL_TREE, NULL_TREE); - assemble_external (TREE_OPERAND (Terminate, 0)); { --- 985,988 ---- *************** *** 1066,1070 **** jumpif (make_tree (integer_type_node, flag), end); do_function_call (Terminate, NULL_TREE, NULL_TREE); - assemble_external (TREE_OPERAND (Terminate, 0)); emit_barrier (); do_pending_stack_adjust (); --- 1061,1064 ---- *************** *** 1172,1178 **** if (exceptions_via_longjmp == 0) { - /* Is this necessary? */ - assemble_external (TREE_OPERAND (Terminate, 0)); - expand_eh_region_start (); } --- 1166,1169 ---- *************** *** 1182,1186 **** if (exceptions_via_longjmp == 0) ! expand_eh_region_end (TerminateFunctionCall); expand_leftover_cleanups (); --- 1173,1177 ---- if (exceptions_via_longjmp == 0) ! expand_eh_region_end (build_function_call (Terminate, NULL_TREE)); expand_leftover_cleanups (); *************** *** 1311,1314 **** --- 1302,1306 ---- dtor_identifier, 0); cleanup = TREE_VALUE (cleanup); + mark_used (cleanup); mark_addressable (cleanup); /* Pretend it's a normal function. */ diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/cp/exception.cc gcc-2.8.1/cp/exception.cc *** gcc-2.8.0/cp/exception.cc Tue Nov 25 15:17:28 1997 --- gcc-2.8.1/cp/exception.cc Sat Feb 14 18:24:22 1998 *************** *** 1,4 **** // Functions for Exception Support for -*- C++ -*- ! // Copyright (C) 1994, 1995, 1996 Free Software Foundation // This file is part of GNU CC. --- 1,4 ---- // Functions for Exception Support for -*- C++ -*- ! // Copyright (C) 1994, 1995, 1996, 1998 Free Software Foundation // This file is part of GNU CC. *************** *** 126,134 **** /* Compiler hook to pop an exception that has been finalized. Used by push_eh_cleanup(). P is the info for the exception caught by the ! current catch block, and HANDLER determines if we've been called from ! an exception handler; if so, we avoid destroying the object on rethrow. */ extern "C" void ! __cp_pop_exception (cp_eh_info *p, bool handler) { cp_eh_info **q = &__eh_info; --- 126,133 ---- /* Compiler hook to pop an exception that has been finalized. Used by push_eh_cleanup(). P is the info for the exception caught by the ! current catch block. */ extern "C" void ! __cp_pop_exception (cp_eh_info *p) { cp_eh_info **q = &__eh_info; *************** *** 136,140 **** --p->handlers; ! if (p->handlers > 0 || (handler && p == *q)) return; --- 135,143 ---- --p->handlers; ! /* Don't really pop if there are still active handlers for our exception, ! or if our exception is being rethrown (i.e. if the active exception is ! our exception and it is uncaught). */ ! if (p->handlers != 0 ! || (p == *q && !p->caught)) return; diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/cp/init.c gcc-2.8.1/cp/init.c *** gcc-2.8.0/cp/init.c Mon Dec 22 17:51:25 1997 --- gcc-2.8.1/cp/init.c Tue Feb 3 14:32:16 1998 *************** *** 2453,2466 **** } - /* If the first placement arg is of type nothrow_t, it's allowed to - return 0 on allocation failure. */ - nothrow = (placement && TREE_VALUE (placement) - && TREE_TYPE (TREE_VALUE (placement)) - && IS_AGGR_TYPE (TREE_TYPE (TREE_VALUE (placement))) - && (TYPE_IDENTIFIER (TREE_TYPE (TREE_VALUE (placement))) - == get_identifier ("nothrow_t"))); - - check_new = flag_check_new || nothrow; - #if 1 /* Get a little extra space to store a couple of things before the new'ed --- 2453,2456 ---- *************** *** 2494,2509 **** /* Allocate the object. */ ! if (! use_global_new && TYPE_LANG_SPECIFIC (true_type) ! && (TYPE_GETS_NEW (true_type) & (1 << has_array))) ! rval = build_opfncall (code, LOOKUP_NORMAL, ! build_pointer_type (true_type), size, placement); ! else if (placement) ! { ! rval = build_opfncall (code, LOOKUP_GLOBAL|LOOKUP_COMPLAIN, ! ptr_type_node, size, placement); ! rval = cp_convert (build_pointer_type (true_type), rval); ! } ! else if (! has_array && flag_this_is_variable > 0 ! && TYPE_NEEDS_CONSTRUCTING (true_type) && init != void_type_node) { if (init == NULL_TREE || TREE_CODE (init) == TREE_LIST) --- 2484,2490 ---- /* Allocate the object. */ ! ! if (! has_array && ! placement && flag_this_is_variable > 0 ! && TYPE_NEEDS_CONSTRUCTING (true_type) && init != void_type_node) { if (init == NULL_TREE || TREE_CODE (init) == TREE_LIST) *************** *** 2517,2527 **** else { ! rval = build_builtin_call (build_pointer_type (true_type), ! has_array ? BIVN : BIN, ! build_expr_list (NULL_TREE, size)); ! TREE_CALLS_NEW (rval) = 1; } ! if (check_new && rval) alloc_expr = rval = save_expr (rval); else --- 2498,2541 ---- else { ! rval = build_op_new_call ! (code, true_type, expr_tree_cons (NULL_TREE, size, placement), ! LOOKUP_NORMAL | (use_global_new * LOOKUP_GLOBAL)); ! rval = cp_convert (build_pointer_type (true_type), rval); ! } ! ! /* unless an allocation function is declared with an empty excep- ! tion-specification (_except.spec_), throw(), it indicates failure to ! allocate storage by throwing a bad_alloc exception (clause _except_, ! _lib.bad.alloc_); it returns a non-null pointer otherwise If the allo- ! cation function is declared with an empty exception-specification, ! throw(), it returns null to indicate failure to allocate storage and a ! non-null pointer otherwise. ! ! So check for a null exception spec on the op new we just called. */ ! ! nothrow = 0; ! if (rval) ! { ! /* The CALL_EXPR. */ ! tree t = TREE_OPERAND (rval, 0); ! /* The function. */ ! t = TREE_OPERAND (TREE_OPERAND (t, 0), 0); ! t = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (t)); ! ! if (t && TREE_VALUE (t) == NULL_TREE) ! nothrow = 1; } + check_new = flag_check_new || nothrow; ! if (flag_exceptions && rval) ! { ! /* This must last longer so we can use it in the cleanup. ! The subexpressions don't need to last, because we won't look at ! them when expanding the cleanup. */ ! int yes = suspend_momentary (); ! alloc_expr = rval = save_expr (rval); ! resume_momentary (yes); ! } ! else if (check_new && rval) alloc_expr = rval = save_expr (rval); else *************** *** 2706,2709 **** --- 2720,2757 ---- } #endif + + /* If any part of the object initialization terminates by throwing + an exception and the new-expression does not contain a + new-placement, then the deallocation function is called to free + the memory in which the object was being constructed. */ + if (flag_exceptions && alloc_expr) + { + enum tree_code dcode = has_array? VEC_DELETE_EXPR : DELETE_EXPR; + tree cleanup, args = NULL_TREE; + int flags = LOOKUP_NORMAL | (use_global_new * LOOKUP_GLOBAL); + + /* All cleanups must last longer than normal. */ + int yes = suspend_momentary (); + + if (placement) + flags |= LOOKUP_SPECULATIVELY; + + /* Copy size to the saveable obstack. */ + size = copy_node (size); + + cleanup = build_op_delete_call (dcode, alloc_expr, size, flags); + + resume_momentary (yes); + + if (cleanup) + { + /* FIXME: this is a workaround for a crash due to overlapping + exception regions. Cleanups shouldn't really happen here. */ + rval = build1 (CLEANUP_POINT_EXPR, TREE_TYPE (rval), rval); + + rval = build (TRY_CATCH_EXPR, TREE_TYPE (rval), rval, cleanup); + rval = build (COMPOUND_EXPR, TREE_TYPE (rval), alloc_expr, rval); + } + } } else if (TYPE_READONLY (true_type)) *************** *** 2712,2716 **** done: ! if (alloc_expr && rval != alloc_expr) { /* Did we modify the storage? */ --- 2760,2764 ---- done: ! if (check_new && alloc_expr && rval != alloc_expr) { /* Did we modify the storage? */ *************** *** 3113,3116 **** --- 3161,3165 ---- RTL_EXPR_RTL (cleanup) = const0_rtx; TREE_SIDE_EFFECTS (cleanup) = 1; + do_pending_stack_adjust (); start_sequence_for_rtl_expr (cleanup); *************** *** 3120,3123 **** --- 3169,3173 ---- type); expand_expr (e1, const0_rtx, VOIDmode, EXPAND_NORMAL); + do_pending_stack_adjust (); RTL_EXPR_SEQUENCE (cleanup) = get_insns (); end_sequence (); *************** *** 3161,3174 **** int use_global_delete = which_delete & 1; int use_vec_delete = !!(which_delete & 2); - tree rval; enum tree_code code = use_vec_delete ? VEC_DELETE_EXPR : DELETE_EXPR; ! if (! use_global_delete && TYPE_LANG_SPECIFIC (TREE_TYPE (type)) ! && (TYPE_GETS_DELETE (TREE_TYPE (type)) & (1 << use_vec_delete))) ! rval = build_opfncall (code, LOOKUP_NORMAL, addr, virtual_size, NULL_TREE); ! else ! rval = build_builtin_call (void_type_node, use_vec_delete ? BIVD : BID, ! build_expr_list (NULL_TREE, addr)); ! return rval; } --- 3211,3218 ---- int use_global_delete = which_delete & 1; int use_vec_delete = !!(which_delete & 2); enum tree_code code = use_vec_delete ? VEC_DELETE_EXPR : DELETE_EXPR; + int flags = LOOKUP_NORMAL | (use_global_delete * LOOKUP_GLOBAL); ! return build_op_delete_call (code, addr, virtual_size, flags); } *************** *** 3267,3282 **** return void_zero_node; ! /* Pass the size of the object down to the operator delete() in ! addition to the ADDR. */ ! if (TYPE_GETS_REG_DELETE (type) && !use_global_delete) ! { ! tree virtual_size = c_sizeof_nowarn (type); ! return build_opfncall (DELETE_EXPR, LOOKUP_NORMAL, addr, ! virtual_size, NULL_TREE); ! } ! ! /* Call the builtin operator delete. */ ! return build_builtin_call (void_type_node, BID, ! build_expr_list (NULL_TREE, addr)); } --- 3311,3317 ---- return void_zero_node; ! return build_op_delete_call ! (DELETE_EXPR, addr, c_sizeof_nowarn (type), ! LOOKUP_NORMAL | (use_global_delete * LOOKUP_GLOBAL)); } diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/cp/method.c gcc-2.8.1/cp/method.c *** gcc-2.8.0/cp/method.c Mon Dec 22 17:45:01 1997 --- gcc-2.8.1/cp/method.c Sat Feb 14 06:51:08 1998 *************** *** 1,8 **** /* Handle the hair of processing (but not expanding) inline functions. Also manage function and variable name overloading. ! Copyright (C) 1987, 89, 92-96, 1997 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) ! This file is part of GNU CC. GNU CC is free software; you can redistribute it and/or modify --- 1,8 ---- /* Handle the hair of processing (but not expanding) inline functions. Also manage function and variable name overloading. ! Copyright (C) 1987, 89, 92-97, 1998 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) ! This file is part of GNU CC. GNU CC is free software; you can redistribute it and/or modify *************** *** 1120,1124 **** /* member operators new and delete look like methods at this point. */ ! if (! for_method && parms != NULL_TREE && TREE_CODE (parms) == TREE_LIST) { if (dname == ansi_opname[(int) DELETE_EXPR]) --- 1120,1125 ---- /* member operators new and delete look like methods at this point. */ ! if (! for_method && parms != NULL_TREE && TREE_CODE (parms) == TREE_LIST ! && TREE_CHAIN (parms) == void_list_node) { if (dname == ansi_opname[(int) DELETE_EXPR]) *************** *** 1126,1136 **** else if (dname == ansi_opname[(int) VEC_DELETE_EXPR]) return get_identifier ("__builtin_vec_delete"); ! else if (TREE_CHAIN (parms) == void_list_node) ! { ! if (dname == ansi_opname[(int) NEW_EXPR]) ! return get_identifier ("__builtin_new"); ! else if (dname == ansi_opname[(int) VEC_NEW_EXPR]) ! return get_identifier ("__builtin_vec_new"); ! } } --- 1127,1134 ---- else if (dname == ansi_opname[(int) VEC_DELETE_EXPR]) return get_identifier ("__builtin_vec_delete"); ! if (dname == ansi_opname[(int) NEW_EXPR]) ! return get_identifier ("__builtin_new"); ! else if (dname == ansi_opname[(int) VEC_NEW_EXPR]) ! return get_identifier ("__builtin_vec_new"); } *************** *** 1808,1812 **** int delta; { ! char buffer[250]; tree thunk_id; tree thunk; --- 1806,1810 ---- int delta; { ! char *buffer; tree thunk_id; tree thunk; *************** *** 1819,1822 **** --- 1817,1821 ---- abort (); func_name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (func_decl)); + buffer = (char *)alloca (strlen (func_name) + 32); if (delta<=0) sprintf (buffer, "__thunk_%d_%s", -delta, func_name); diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/cp/parse.y gcc-2.8.1/cp/parse.y *** gcc-2.8.0/cp/parse.y Wed Dec 3 08:39:12 1997 --- gcc-2.8.1/cp/parse.y Tue Feb 3 14:32:27 1998 *************** *** 3018,3033 **** if (TREE_CODE ($1) == IDENTIFIER_NODE) { if (current_class_type && TYPE_BEING_DEFINED (current_class_type) && ! IDENTIFIER_CLASS_VALUE ($1)) { - /* Be sure to get an inherited typedef. */ - $$ = lookup_name ($1, 1); /* Remember that this name has been used in the class definition, as per [class.scope0] */ pushdecl_class_level ($$); } - else - $$ = identifier_typedecl_value ($1); } else --- 3018,3030 ---- if (TREE_CODE ($1) == IDENTIFIER_NODE) { + $$ = lookup_name ($1, 1); if (current_class_type && TYPE_BEING_DEFINED (current_class_type) && ! IDENTIFIER_CLASS_VALUE ($1)) { /* Remember that this name has been used in the class definition, as per [class.scope0] */ pushdecl_class_level ($$); } } else *************** *** 3037,3041 **** { if (TREE_CODE ($2) == IDENTIFIER_NODE) ! $$ = identifier_typedecl_value ($2); else $$ = $2; --- 3034,3038 ---- { if (TREE_CODE ($2) == IDENTIFIER_NODE) ! $$ = IDENTIFIER_GLOBAL_VALUE ($2); else $$ = $2; *************** *** 3286,3290 **** { if (TREE_CODE ($2) == IDENTIFIER_NODE) ! $$ = identifier_typedecl_value ($2); else $$ = $2; --- 3283,3287 ---- { if (TREE_CODE ($2) == IDENTIFIER_NODE) ! $$ = IDENTIFIER_GLOBAL_VALUE ($2); else $$ = $2; diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/cp/pt.c gcc-2.8.1/cp/pt.c *** gcc-2.8.0/cp/pt.c Wed Dec 3 08:10:33 1997 --- gcc-2.8.1/cp/pt.c Tue Feb 3 14:32:34 1998 *************** *** 1086,1090 **** else if (!TREE_CONSTANT (val)) { ! cp_error ("non-const `%E' cannot be used as template argument", arg); val = error_mark_node; --- 1086,1090 ---- else if (!TREE_CONSTANT (val)) { ! cp_error ("non-constant `%E' cannot be used as template argument", arg); val = error_mark_node; *************** *** 1158,1162 **** if (TREE_CODE (nt) != TREE_CODE (ot)) return 0; ! if (TREE_CODE_CLASS (TREE_CODE (ot)) == 't') { if (comptypes (ot, nt, 1)) --- 1158,1168 ---- if (TREE_CODE (nt) != TREE_CODE (ot)) return 0; ! if (TREE_CODE (nt) == TREE_VEC) ! { ! /* For member templates */ ! if (comp_template_args (nt, ot)) ! continue; ! } ! else if (TREE_CODE_CLASS (TREE_CODE (ot)) == 't') { if (comptypes (ot, nt, 1)) *************** *** 2026,2029 **** --- 2032,2068 ---- } + /* If arg is a non-type template parameter that does not depend on template + arguments, fold it like we weren't in the body of a template. */ + + static tree + maybe_fold_nontype_arg (arg) + tree arg; + { + if (TREE_CODE_CLASS (TREE_CODE (arg)) != 't' + && !uses_template_parms (arg)) + { + /* Sometimes, one of the args was an expression involving a + template constant parameter, like N - 1. Now that we've + tsubst'd, we might have something like 2 - 1. This will + confuse lookup_template_class, so we do constant folding + here. We have to unset processing_template_decl, to + fool build_expr_from_tree() into building an actual + tree. */ + + int saved_processing_template_decl = processing_template_decl; + processing_template_decl = 0; + arg = fold (build_expr_from_tree (arg)); + processing_template_decl = saved_processing_template_decl; + } + return arg; + } + + /* Take the tree structure T and replace template parameters used therein + with the argument vector ARGS. NARGS is the number of args; should + be removed. IN_DECL is an associated decl for diagnostics. + + tsubst is used for dealing with types, decls and the like; for + expressions, use tsubst_expr or tsubst_copy. */ + tree tsubst (t, args, nargs, in_decl) *************** *** 2247,2258 **** } - if (type == TREE_TYPE (t) - && (! member || ctx == DECL_CLASS_CONTEXT (t))) - { - t = copy_node (t); - copy_lang_decl (t); - return t; - } - /* Do we already have this instantiation? */ if (DECL_TEMPLATE_INFO (t) != NULL_TREE) --- 2286,2289 ---- *************** *** 2263,2267 **** for (; decls; decls = TREE_CHAIN (decls)) if (TREE_TYPE (TREE_VALUE (decls)) == type ! && DECL_CLASS_CONTEXT (TREE_VALUE (decls)) == ctx) return TREE_VALUE (decls); } --- 2294,2299 ---- for (; decls; decls = TREE_CHAIN (decls)) if (TREE_TYPE (TREE_VALUE (decls)) == type ! && DECL_CLASS_CONTEXT (TREE_VALUE (decls)) == ctx ! && comp_template_args (TREE_PURPOSE (decls), args)) return TREE_VALUE (decls); } *************** *** 2617,2638 **** for (i = 0; i < len; i++) { ! elts[i] = tsubst_expr (TREE_VEC_ELT (t, i), args, nargs, in_decl); ! ! if (TREE_CODE_CLASS (TREE_CODE (elts[i])) != 't' ! && !uses_template_parms (elts[i])) ! { ! /* Sometimes, one of the args was an expression involving a ! template constant parameter, like N - 1. Now that we've ! tsubst'd, we might have something like 2 - 1. This will ! confuse lookup_template_class, so we do constant folding ! here. We have to unset processing_template_decl, to ! fool build_expr_from_tree() into building an actual ! tree. */ ! ! int saved_processing_template_decl = processing_template_decl; ! processing_template_decl = 0; ! elts[i] = fold (build_expr_from_tree (elts[i])); ! processing_template_decl = saved_processing_template_decl; ! } if (elts[i] != TREE_VEC_ELT (t, i)) --- 2649,2654 ---- for (i = 0; i < len; i++) { ! elts[i] = maybe_fold_nontype_arg ! (tsubst_expr (TREE_VEC_ELT (t, i), args, nargs, in_decl)); if (elts[i] != TREE_VEC_ELT (t, i)) *************** *** 2848,2851 **** --- 2864,2871 ---- } + /* Like tsubst, but deals with expressions. This function just replaces + template parms; to finish processing the resultant expression, use + tsubst_expr. */ + tree tsubst_copy (t, args, nargs, in_decl) *************** *** 2967,2971 **** tree fn = TREE_OPERAND (t, 0); if (really_overloaded_fn (fn)) ! fn = tsubst_copy (TREE_VALUE (fn), args, nargs, in_decl); else fn = tsubst_copy (fn, args, nargs, in_decl); --- 2987,2991 ---- tree fn = TREE_OPERAND (t, 0); if (really_overloaded_fn (fn)) ! fn = tsubst_copy (get_first_fn (fn), args, nargs, in_decl); else fn = tsubst_copy (fn, args, nargs, in_decl); *************** *** 3029,3036 **** case TEMPLATE_ID_EXPR: { ! tree r = lookup_template_function ! (tsubst_copy (TREE_OPERAND (t, 0), args, nargs, in_decl), ! tsubst_copy (TREE_OPERAND (t, 1), args, nargs, in_decl)); ! return r; } --- 3049,3060 ---- case TEMPLATE_ID_EXPR: { ! /* Substituted template arguments */ ! tree targs = tsubst_copy (TREE_OPERAND (t, 1), args, nargs, in_decl); ! tree chain; ! for (chain = targs; chain; chain = TREE_CHAIN (chain)) ! TREE_VALUE (chain) = maybe_fold_nontype_arg (TREE_VALUE (chain)); ! ! return lookup_template_function ! (tsubst_copy (TREE_OPERAND (t, 0), args, nargs, in_decl), targs); } *************** *** 3090,3093 **** --- 3114,3119 ---- } + /* Like tsubst_copy, but also does semantic processing and RTL expansion. */ + tree tsubst_expr (t, args, nargs, in_decl) *************** *** 3826,3829 **** --- 3852,3856 ---- case INTEGER_TYPE: case BOOLEAN_TYPE: + case VOID_TYPE: if (TREE_CODE (arg) != TREE_CODE (parm)) return 1; *************** *** 3963,3966 **** --- 3990,3998 ---- DECL_INTERFACE_KNOWN (result) = 1; DECL_NOT_REALLY_EXTERN (result) = 1; + + /* For WIN32 we also want to put explicit instantiations in + linkonce sections. */ + if (supports_one_only () && ! SUPPORTS_WEAK) + comdat_linkage (result); } else if (TREE_CODE (result) == FUNCTION_DECL) *************** *** 4296,4301 **** { SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t); ! SET_CLASSTYPE_INTERFACE_KNOWN (t); ! CLASSTYPE_INTERFACE_ONLY (t) = extern_p; CLASSTYPE_VTABLE_NEEDS_WRITING (t) = ! extern_p; TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p; --- 4328,4341 ---- { SET_CLASSTYPE_EXPLICIT_INSTANTIATION (t); ! ! if (supports_one_only () && ! SUPPORTS_WEAK) ! /* For WIN32 we also want to put explicit instantiations in ! linkonce sections. */; ! else ! { ! SET_CLASSTYPE_INTERFACE_KNOWN (t); ! CLASSTYPE_INTERFACE_ONLY (t) = extern_p; ! } ! CLASSTYPE_VTABLE_NEEDS_WRITING (t) = ! extern_p; TYPE_DECL_SUPPRESS_DEBUG (TYPE_NAME (t)) = extern_p; *************** *** 4372,4376 **** if (! static_p) for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp)) ! if (DECL_TEMPLATE_INSTANTIATION (tmp)) { mark_decl_instantiated (tmp, extern_p); --- 4412,4417 ---- if (! static_p) for (tmp = TYPE_METHODS (t); tmp; tmp = TREE_CHAIN (tmp)) ! if (TREE_CODE (tmp) == FUNCTION_DECL ! && DECL_TEMPLATE_INSTANTIATION (tmp)) { mark_decl_instantiated (tmp, extern_p); *************** *** 4490,4502 **** } if (! pattern_defined ! || (TREE_CODE (d) == FUNCTION_DECL && ! DECL_INLINE (d) ! && (! DECL_INTERFACE_KNOWN (d) ! || ! DECL_NOT_REALLY_EXTERN (d))) ! /* Kludge: if we compile a constructor in the middle of processing a ! toplevel declaration, we blow away the declspecs in ! temp_decl_obstack when we call permanent_allocation in ! finish_function. So don't compile it yet. */ ! || (TREE_CODE (d) == FUNCTION_DECL && ! nested && ! at_eof)) { add_pending_template (d); --- 4531,4544 ---- } + /* Reject all external templates except inline functions. */ + if (DECL_INTERFACE_KNOWN (d) + && ! DECL_NOT_REALLY_EXTERN (d) + && ! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d))) + goto out; + + /* Defer all templates except inline functions used in another function. */ if (! pattern_defined ! || (! (TREE_CODE (d) == FUNCTION_DECL && DECL_INLINE (d) && nested) ! && ! at_eof)) { add_pending_template (d); diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/cp/rtti.c gcc-2.8.1/cp/rtti.c *** gcc-2.8.0/cp/rtti.c Sat Nov 8 18:27:36 1997 --- gcc-2.8.1/cp/rtti.c Tue Feb 3 14:32:36 1998 *************** *** 429,441 **** tree dcast_fn; - if (type == error_mark_node || expr == error_mark_node) - return error_mark_node; - - if (processing_template_decl) - { - tree t = build_min (DYNAMIC_CAST_EXPR, type, expr); - return t; - } - assert (exprtype != NULL_TREE); ec = TREE_CODE (exprtype); --- 429,432 ---- *************** *** 648,651 **** --- 639,648 ---- tree type, expr; { + if (type == error_mark_node || expr == error_mark_node) + return error_mark_node; + + if (processing_template_decl) + return build_min (DYNAMIC_CAST_EXPR, type, expr); + return convert_from_reference (build_dynamic_cast_1 (type, expr)); } diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/cp/spew.c gcc-2.8.1/cp/spew.c *** gcc-2.8.0/cp/spew.c Sat Nov 8 18:27:39 1997 --- gcc-2.8.1/cp/spew.c Tue Feb 3 14:32:38 1998 *************** *** 313,319 **** case TYPENAME: case SELFNAME: ! lastiddecl = identifier_typedecl_value (tmp_token.yylval.ttype); ! if (lastiddecl != trrr) ! lastiddecl = trrr; if (got_scope) tmp_token.yylval.ttype = trrr; --- 313,317 ---- case TYPENAME: case SELFNAME: ! lastiddecl = trrr; if (got_scope) tmp_token.yylval.ttype = trrr; diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/cp/tree.c gcc-2.8.1/cp/tree.c *** gcc-2.8.0/cp/tree.c Tue Nov 25 15:09:19 1997 --- gcc-2.8.1/cp/tree.c Tue Feb 3 14:32:44 1998 *************** *** 1307,1311 **** tree from; { ! if (TREE_CODE (from) == FUNCTION_DECL || DECL_FUNCTION_TEMPLATE_P (from)) return from; --- 1307,1312 ---- tree from; { ! if (TREE_CODE (from) == FUNCTION_DECL ! || TREE_CODE (from) == TEMPLATE_ID_EXPR || DECL_FUNCTION_TEMPLATE_P (from)) return from; *************** *** 1866,1871 **** tree t; { - if (TREE_CODE (t) == IDENTIFIER_NODE) - return identifier_typedecl_value (t); if (TREE_CODE (t) == TYPE_DECL) return t; --- 1867,1870 ---- diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/cp/typeck.c gcc-2.8.1/cp/typeck.c *** gcc-2.8.0/cp/typeck.c Wed Dec 3 08:39:50 1997 --- gcc-2.8.1/cp/typeck.c Sat Feb 14 18:46:25 1998 *************** *** 2282,2285 **** --- 2282,2286 ---- { tree type; + tree template_id = NULL_TREE; int is_method; *************** *** 2290,2293 **** --- 2291,2301 ---- return build_min_nt (CALL_EXPR, function, params, NULL_TREE); + /* Save explicit template arguments if found */ + if (TREE_CODE (function) == TEMPLATE_ID_EXPR) + { + template_id = function; + function = TREE_OPERAND (function, 0); + } + type = TREE_TYPE (function); *************** *** 2384,2387 **** --- 2392,2398 ---- } + /* Put back explicit template arguments, if any. */ + if (template_id) + function = template_id; return build_method_call (decl, function, params, NULL_TREE, LOOKUP_NORMAL); *************** *** 2412,2416 **** if (flag_ansi_overloading) ! return build_new_function_call (function, params, NULL_TREE); if (TREE_CODE (val) == TEMPLATE_DECL) --- 2423,2432 ---- if (flag_ansi_overloading) ! { ! /* Put back explicit template arguments, if any. */ ! if (template_id) ! function = template_id; ! return build_new_function_call (function, params); ! } if (TREE_CODE (val) == TEMPLATE_DECL) *************** *** 4792,4801 **** case FUNCTION_DECL: ! /* We have to test both conditions here. The first may ! be non-zero in the case of processing a default function. ! The second may be non-zero in the case of a template function. */ ! x = DECL_MAIN_VARIANT (x); ! if (DECL_TEMPLATE_INFO (x) && !DECL_TEMPLATE_SPECIALIZATION (x)) ! mark_used (x); TREE_ADDRESSABLE (x) = 1; TREE_USED (x) = 1; --- 4808,4820 ---- case FUNCTION_DECL: ! if (DECL_LANG_SPECIFIC (x) != 0) ! { ! x = DECL_MAIN_VARIANT (x); ! /* We have to test both conditions here. The first may be ! non-zero in the case of processing a default function. The ! second may be non-zero in the case of a template function. */ ! if (DECL_TEMPLATE_INFO (x) && !DECL_TEMPLATE_SPECIALIZATION (x)) ! mark_used (x); ! } TREE_ADDRESSABLE (x) = 1; TREE_USED (x) = 1; diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/cp/typeck2.c gcc-2.8.1/cp/typeck2.c *** gcc-2.8.0/cp/typeck2.c Sat Nov 8 18:27:42 1997 --- gcc-2.8.1/cp/typeck2.c Tue Feb 3 14:33:02 1998 *************** *** 744,747 **** --- 744,750 ---- else if (TREE_READONLY_DECL_P (init)) init = decl_constant_value (init); + else if (IS_AGGR_TYPE (type) && TYPE_NEEDS_CONSTRUCTING (type)) + init = ocp_convert (type, init, CONV_IMPLICIT|CONV_FORCE_TEMP, + LOOKUP_NORMAL); return init; } diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/cpp.texi gcc-2.8.1/cpp.texi *** gcc-2.8.0/cpp.texi Sun Oct 26 18:56:36 1997 --- gcc-2.8.1/cpp.texi Tue Feb 17 13:42:42 1998 *************** *** 935,939 **** @item __STRICT_ANSI__ @findex __STRICT_ANSI__ ! This macro is defined if and only if the @samp{-ansi} switch was specified when GNU C was invoked. Its definition is the null string. This macro exists primarily to direct certain GNU header files not to --- 935,939 ---- @item __STRICT_ANSI__ @findex __STRICT_ANSI__ ! GNU C defines this macro if and only if the @samp{-ansi} switch was specified when GNU C was invoked. Its definition is the null string. This macro exists primarily to direct certain GNU header files not to *************** *** 957,1002 **** @item __VERSION__ @findex __VERSION__ ! This macro expands to a string which describes the version number of GNU C@. The string is normally a sequence of decimal numbers separated ! by periods, such as @samp{"2.6.0"}. The only reasonable use of this ! macro is to incorporate it into a string constant. @item __OPTIMIZE__ @findex __OPTIMIZE__ ! This macro is defined in optimizing compilations. It causes certain ! GNU header files to define alternative macro definitions for some ! system library functions. It is unwise to refer to or test the ! definition of this macro unless you make very sure that programs will ! execute with the same effect regardless. @item __CHAR_UNSIGNED__ @findex __CHAR_UNSIGNED__ ! This macro is defined if and only if the data type @code{char} is ! unsigned on the target machine. It exists to cause the standard ! header file @file{limits.h} to work correctly. It is bad practice ! to refer to this macro yourself; instead, refer to the standard ! macros defined in @file{limits.h}. The preprocessor uses ! this macro to determine whether or not to sign-extend large character ! constants written in octal; see @ref{#if Directive,,The @samp{#if} Directive}. @item __REGISTER_PREFIX__ @findex __REGISTER_PREFIX__ ! This macro expands to a string describing the prefix applied to cpu ! registers in assembler code. It can be used to write assembler code ! that is usable in multiple environments. For example, in the ! @samp{m68k-aout} environment it expands to the string @samp{""}, ! but in the @samp{m68k-coff} environment it expands to the string ! @samp{"%"}. @item __USER_LABEL_PREFIX__ @findex __USER_LABEL_PREFIX__ ! This macro expands to a string describing the prefix applied to user ! generated labels in assembler code. It can be used to write assembler ! code that is usable in multiple environments. For example, in the ! @samp{m68k-aout} environment it expands to the string @samp{"_"}, but in ! the @samp{m68k-coff} environment it expands to the string @samp{""}. ! This does not work with the @samp{-mno-underscores} option that the ! i386 OSF/rose and m88k targets provide nor with the @samp{-mcall*} options ! of the rs6000 System V Release 4 target. @end table --- 957,1000 ---- @item __VERSION__ @findex __VERSION__ ! This macro expands to a string constant which describes the version number of GNU C@. The string is normally a sequence of decimal numbers separated ! by periods, such as @samp{"2.6.0"}. @item __OPTIMIZE__ @findex __OPTIMIZE__ ! GNU CC defines this macro in optimizing compilations. It causes certain ! GNU header files to define alternative macro definitions for some system ! library functions. You should not refer to or test the definition of ! this macro unless you make very sure that programs will execute with the ! same effect regardless. @item __CHAR_UNSIGNED__ @findex __CHAR_UNSIGNED__ ! GNU C defines this macro if and only if the data type @code{char} is ! unsigned on the target machine. It exists to cause the standard header ! file @file{limits.h} to work correctly. You should not refer to this ! macro yourself; instead, refer to the standard macros defined in ! @file{limits.h}. The preprocessor uses this macro to determine whether ! or not to sign-extend large character constants written in octal; see ! @ref{#if Directive,,The @samp{#if} Directive}. @item __REGISTER_PREFIX__ @findex __REGISTER_PREFIX__ ! This macro expands to a string (not a string constant) describing the ! prefix applied to CPU registers in assembler code. You can use it to ! write assembler code that is usable in multiple environments. For ! example, in the @samp{m68k-aout} environment it expands to the null ! string, but in the @samp{m68k-coff} environment it expands to the string ! @samp{%}. @item __USER_LABEL_PREFIX__ @findex __USER_LABEL_PREFIX__ ! Similar to @code{__REGISTER_PREFIX__}, but describes the prefix applied ! to user generated labels in assembler code. For example, in the ! @samp{m68k-aout} environment it expands to the string @samp{_}, but in ! the @samp{m68k-coff} environment it expands to the null string. This ! does not work with the @samp{-mno-underscores} option that the i386 ! OSF/rose and m88k targets provide nor with the @samp{-mcall*} options of ! the rs6000 System V Release 4 target. @end table *************** *** 2688,2692 **** Do not search for header files in the C++-specific standard directories, but do still search the other standard directories. ! (This option is used when building libg++.) @item -remap --- 2686,2690 ---- Do not search for header files in the C++-specific standard directories, but do still search the other standard directories. ! (This option is used when building the C++ library.) @item -remap diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/cpplib.c gcc-2.8.1/cpplib.c *** gcc-2.8.0/cpplib.c Fri Dec 5 05:58:05 1997 --- gcc-2.8.1/cpplib.c Thu Feb 26 07:39:00 1998 *************** *** 1,4 **** /* CPP Library. ! Copyright (C) 1986, 87, 89, 92-6, 1997 Free Software Foundation, Inc. Contributed by Per Bothner, 1994-95. Based on CCCP program by Paul Rubin, June 1986 --- 1,4 ---- /* CPP Library. ! Copyright (C) 1986, 87, 89, 92-97, 1998 Free Software Foundation, Inc. Contributed by Per Bothner, 1994-95. Based on CCCP program by Paul Rubin, June 1986 *************** *** 415,419 **** }; ! #define IS_INCLUDE_DIRECTIVE_TYPE(t) (T_INCLUDE <= (t) && (t) <= T_IMPORT) /* Here is the actual list of #-directives, most-often-used first. --- 415,420 ---- }; ! #define IS_INCLUDE_DIRECTIVE_TYPE(t) \ ! ((int) T_INCLUDE <= (int) (t) && (int) (t) <= (int) T_IMPORT) /* Here is the actual list of #-directives, most-often-used first. *************** *** 7546,7549 **** --- 7547,7551 ---- char *name; { + int e = errno; int i; cpp_buffer *ip = cpp_file_buffer (pfile); *************** *** 7554,7558 **** cpp_file_line_for_message (pfile, ip->nominal_fname, ip->lineno, -1); ! cpp_message (pfile, 1, "%s: %s", name, my_strerror (errno)); } --- 7556,7560 ---- cpp_file_line_for_message (pfile, ip->nominal_fname, ip->lineno, -1); ! cpp_message (pfile, 1, "%s: %s", name, my_strerror (e)); } diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/crtstuff.c gcc-2.8.1/crtstuff.c *** gcc-2.8.0/crtstuff.c Tue Dec 23 22:59:11 1997 --- gcc-2.8.1/crtstuff.c Fri Feb 6 16:31:26 1998 *************** *** 1,5 **** /* Specialized bits of code needed to support construction and destruction of file-scope objects in C++ code. ! Copyright (C) 1991, 1994, 1995, 1996, 1997 Free Software Foundation, Inc. Contributed by Ron Guilmette (rfg@monkeys.com). --- 1,5 ---- /* Specialized bits of code needed to support construction and destruction of file-scope objects in C++ code. ! Copyright (C) 1991, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. Contributed by Ron Guilmette (rfg@monkeys.com). *************** *** 251,254 **** --- 251,266 ---- #endif } + + #ifdef EH_FRAME_SECTION_ASM_OP + /* Define a function here to call __register_frame. crtend.o is linked in + after libgcc.a, and hence can't call libgcc.a functions directly. That + can lead to unresolved function references. */ + void + __frame_dummy () + { + static struct object object; + __register_frame_info (__EH_FRAME_BEGIN__, &object); + } + #endif #endif *************** *** 371,379 **** DO_GLOBAL_CTORS_BODY; ON_EXIT (__do_global_dtors, 0); #ifdef FORCE_INIT_SECTION_ALIGN ! FORCE_INIT_SECTION_ALIGN; #endif ! asm (TEXT_SECTION_ASM_OP); ! } /* epilogue and body go in .init section */ #endif /* OBJECT_FORMAT_ELF */ --- 383,393 ---- DO_GLOBAL_CTORS_BODY; ON_EXIT (__do_global_dtors, 0); + } /* epilogue and body go in .init section */ + #ifdef FORCE_INIT_SECTION_ALIGN ! FORCE_INIT_SECTION_ALIGN; #endif ! ! asm (TEXT_SECTION_ASM_OP); #endif /* OBJECT_FORMAT_ELF */ *************** *** 385,389 **** not an SVR4-style .init section. __do_global_ctors can be non-static in this case because we protect it with -hidden_symbol. */ - extern char __EH_FRAME_BEGIN__[]; static func_ptr __CTOR_END__[]; void --- 399,402 ---- *************** *** 392,397 **** func_ptr *p; #ifdef EH_FRAME_SECTION_ASM_OP ! static struct object object; ! __register_frame_info (__EH_FRAME_BEGIN__, &object); #endif for (p = __CTOR_END__ - 1; *p != (func_ptr) -1; p--) --- 405,409 ---- func_ptr *p; #ifdef EH_FRAME_SECTION_ASM_OP ! __frame_dummy (); #endif for (p = __CTOR_END__ - 1; *p != (func_ptr) -1; p--) diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/cse.c gcc-2.8.1/cse.c *** gcc-2.8.0/cse.c Wed Jan 7 17:30:54 1998 --- gcc-2.8.1/cse.c Fri Feb 6 15:18:23 1998 *************** *** 2312,2315 **** --- 2312,2319 ---- end = 0; + if (flag_pic && GET_CODE (base) == PLUS + && XEXP (base, 0) == pic_offset_table_rtx) + base = XEXP (base, 1); + /* Registers with nonvarying addresses usually have constant equivalents; but the frame pointer register is also possible. */ diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/dwarf2out.c gcc-2.8.1/dwarf2out.c *** gcc-2.8.0/dwarf2out.c Sun Dec 28 08:16:56 1997 --- gcc-2.8.1/dwarf2out.c Sat Feb 28 15:58:13 1998 *************** *** 1,4 **** /* Output Dwarf2 format symbol table information from the GNU C compiler. ! Copyright (C) 1992, 1993, 1995, 1996, 1997 Free Software Foundation, Inc. Contributed by Gary Funck (gary@intrepid.com). Derived from DWARF 1 implementation of Ron Guilmette (rfg@monkeys.com). --- 1,4 ---- /* Output Dwarf2 format symbol table information from the GNU C compiler. ! Copyright (C) 1992, 93, 95, 96, 97, 1998 Free Software Foundation, Inc. Contributed by Gary Funck (gary@intrepid.com). Derived from DWARF 1 implementation of Ron Guilmette (rfg@monkeys.com). *************** *** 553,556 **** --- 553,557 ---- rtx target; { + enum machine_mode mode; int size; struct reg_size_range ranges[5]; *************** *** 568,578 **** continue; ! size = GET_MODE_SIZE (reg_raw_mode[i]); if (size != last_size) { ranges[n_ranges].beg = i; ! ranges[n_ranges].size = last_size = GET_MODE_SIZE (reg_raw_mode[i]); ++n_ranges; ! assert (n_ranges < 5); } ranges[n_ranges-1].end = i; --- 569,595 ---- continue; ! mode = reg_raw_mode[i]; ! ! /* CCmode is arbitrarily given a size of 4 bytes. It is more useful ! to use the same size as word_mode, since that reduces the number ! of ranges we need. It should not matter, since the result should ! never be used for a condition code register anyways. */ ! if (GET_MODE_CLASS (mode) == MODE_CC) ! mode = word_mode; ! ! size = GET_MODE_SIZE (mode); ! ! /* If this register is not valid in the specified mode and ! we have a previous size, use that for the size of this ! register to avoid making junk tiny ranges. */ ! if (! HARD_REGNO_MODE_OK (i, mode) && last_size != -1) ! size = last_size; ! if (size != last_size) { ranges[n_ranges].beg = i; ! ranges[n_ranges].size = last_size = size; ++n_ranges; ! assert (n_ranges <= 5); } ranges[n_ranges-1].end = i; diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/emit-rtl.c gcc-2.8.1/emit-rtl.c *** gcc-2.8.0/emit-rtl.c Mon Dec 1 18:43:44 1997 --- gcc-2.8.1/emit-rtl.c Wed Feb 18 14:13:06 1998 *************** *** 1,4 **** /* Emit RTL for the GNU C-Compiler expander. ! Copyright (C) 1987, 88, 92-96, 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* Emit RTL for the GNU C-Compiler expander. ! Copyright (C) 1987, 88, 92-97, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 49,52 **** --- 49,53 ---- #include "expr.h" #include "regs.h" + #include "hard-reg-set.h" #include "insn-config.h" #include "recog.h" *************** *** 686,689 **** --- 687,698 ---- && (! REG_FUNCTION_VALUE_P (x) || ! rtx_equal_function_value_matters) + #ifdef CLASS_CANNOT_CHANGE_SIZE + && ! (GET_MODE_SIZE (mode) != GET_MODE_SIZE (GET_MODE (x)) + && GET_MODE_CLASS (GET_MODE (x)) != MODE_COMPLEX_INT + && GET_MODE_CLASS (GET_MODE (x)) != MODE_COMPLEX_FLOAT + && (TEST_HARD_REG_BIT + (reg_class_contents[(int) CLASS_CANNOT_CHANGE_SIZE], + REGNO (x)))) + #endif /* We want to keep the stack, frame, and arg pointers special. */ diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/enquire.c gcc-2.8.1/enquire.c *** gcc-2.8.0/enquire.c Wed Dec 3 08:10:54 1997 --- gcc-2.8.1/enquire.c Sat Feb 28 15:58:14 1998 *************** *** 1409,1427 **** c=0; char_max=0; c++; ! if (setjmp(lab)==0) { /* Yields char_max */ ! while (c>char_max) { ! char_max=c; ! c++; ! } } else { ! Vprintf("%sCharacter overflow generates a trap!%s\n", co, oc); ! } ! c=0; char_min=0; ! c--; ! if (setjmp(lab)==0) { /* Yields char_min */ ! while (cchar_max) { ! char_max=c; ! c++; ! } ! } else { ! Vprintf("%sCharacter overflow generates a trap!%s\n", ! co, oc); ! } ! c=0; char_min=0; ! c--; ! if (setjmp(lab)==0) { /* Yields char_min */ ! while (c char_max) ! char_max = ~0; ! c = 0; ! char_min = 0; ! c--; ! if (c < char_min) { ! c = (1 << (bits_per_byte - 1)) - 1; ! c = -c; ! char_min = c; ! c--; ! if (c < char_min) ! char_min = c; ! } } if (c_signed && char_min == 0) { diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/except.c gcc-2.8.1/except.c *** gcc-2.8.0/except.c Sun Dec 28 08:17:02 1997 --- gcc-2.8.1/except.c Sat Feb 14 06:42:35 1998 *************** *** 1,4 **** /* Implements exception handling. ! Copyright (C) 1989, 92-96, 1997 Free Software Foundation, Inc. Contributed by Mike Stump . --- 1,4 ---- /* Implements exception handling. ! Copyright (C) 1989, 92-97, 1998 Free Software Foundation, Inc. Contributed by Mike Stump . *************** *** 730,765 **** systems with threads. One can either replace the routine we emit a call for here in libgcc2.c, or one can modify this routine to work ! with their thread system. */ rtx get_dynamic_handler_chain () { ! #if 0 ! /* Do this once we figure out how to get this to the front of the ! function, and we really only want one per real function, not one ! per inlined function. */ ! if (current_function_dhc == 0) ! { ! rtx dhc, insns; ! start_sequence (); ! dhc = emit_library_call_value (get_dynamic_handler_chain_libfunc, ! NULL_RTX, 1, ! Pmode, 0); ! current_function_dhc = copy_to_reg (dhc); ! insns = get_insns (); ! end_sequence (); ! emit_insns_before (insns, get_first_nonparm_insn ()); } - #else - rtx dhc; - dhc = emit_library_call_value (get_dynamic_handler_chain_libfunc, - NULL_RTX, 1, - Pmode, 0); - current_function_dhc = copy_to_reg (dhc); - #endif ! /* We don't want a copy of the dhc, but rather, the single dhc. */ ! return gen_rtx (MEM, Pmode, current_function_dhc); } --- 730,780 ---- systems with threads. One can either replace the routine we emit a call for here in libgcc2.c, or one can modify this routine to work ! with their thread system. ! ! Ideally, we really only want one per real function, not one ! per inlined function. */ rtx get_dynamic_handler_chain () { ! static tree fn; ! tree expr; ! rtx insns; ! if (current_function_dhc) ! return current_function_dhc; ! ! if (fn == NULL_TREE) ! { ! tree fntype; ! fn = get_identifier ("__get_dynamic_handler_chain"); ! push_obstacks_nochange (); ! end_temporary_allocation (); ! fntype = build_pointer_type (build_pointer_type ! (build_pointer_type (void_type_node))); ! fntype = build_function_type (fntype, NULL_TREE); ! fn = build_decl (FUNCTION_DECL, fn, fntype); ! DECL_EXTERNAL (fn) = 1; ! TREE_PUBLIC (fn) = 1; ! DECL_ARTIFICIAL (fn) = 1; ! TREE_READONLY (fn) = 1; ! make_decl_rtl (fn, NULL_PTR, 1); ! assemble_external (fn); ! pop_obstacks (); } ! expr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (fn)), fn); ! expr = build (CALL_EXPR, TREE_TYPE (TREE_TYPE (fn)), ! expr, NULL_TREE, NULL_TREE); ! TREE_SIDE_EFFECTS (expr) = 1; ! expr = build1 (INDIRECT_REF, TREE_TYPE (TREE_TYPE (expr)), expr); ! ! start_sequence (); ! current_function_dhc = expand_expr (expr, NULL_RTX, VOIDmode, 0); ! insns = get_insns (); ! end_sequence (); ! emit_insns_before (insns, get_first_nonparm_insn ()); ! ! return current_function_dhc; } *************** *** 994,997 **** --- 1009,1013 ---- expand_eh_region_start_for_decl (decl); + ehstack.top->entry->finalization = cleanup; return 0; *************** *** 1117,1120 **** --- 1133,1187 ---- expand_end_bindings (NULL_TREE, 0, 0); } + } + + /* End the EH region for a goto fixup. We only need them in the region-based + EH scheme. */ + + void + expand_fixup_region_start () + { + if (! doing_eh (0) || exceptions_via_longjmp) + return; + + expand_eh_region_start (); + } + + /* End the EH region for a goto fixup. CLEANUP is the cleanup we just + expanded; to avoid running it twice if it throws, we look through the + ehqueue for a matching region and rethrow from its outer_context. */ + + void + expand_fixup_region_end (cleanup) + tree cleanup; + { + tree t; + struct eh_node *node; + int yes; + + if (! doing_eh (0) || exceptions_via_longjmp) + return; + + for (node = ehstack.top; node && node->entry->finalization != cleanup; ) + node = node->chain; + if (node == 0) + for (node = ehqueue.head; node && node->entry->finalization != cleanup; ) + node = node->chain; + if (node == 0) + abort (); + + yes = suspend_momentary (); + + t = build (RTL_EXPR, void_type_node, NULL_RTX, const0_rtx); + TREE_SIDE_EFFECTS (t) = 1; + do_pending_stack_adjust (); + start_sequence_for_rtl_expr (t); + expand_internal_throw (node->entry->outer_context); + do_pending_stack_adjust (); + RTL_EXPR_SEQUENCE (t) = get_insns (); + end_sequence (); + + resume_momentary (yes); + + expand_eh_region_end (t); } diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/explow.c gcc-2.8.1/explow.c *** gcc-2.8.0/explow.c Wed Dec 3 08:10:55 1997 --- gcc-2.8.1/explow.c Tue Feb 3 21:16:03 1998 *************** *** 1,4 **** /* Subroutines for manipulating rtx's in semantically interesting ways. ! Copyright (C) 1987, 91, 94, 95, 96, 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* Subroutines for manipulating rtx's in semantically interesting ways. ! Copyright (C) 1987, 91, 94-97, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 1235,1239 **** /* If we have to generate explicit probes, see if we have a constant small number of them to generate. If so, that's the easy case. */ ! if (GET_CODE (size) == CONST_INT && INTVAL (size) < 10) { HOST_WIDE_INT offset; --- 1235,1240 ---- /* If we have to generate explicit probes, see if we have a constant small number of them to generate. If so, that's the easy case. */ ! if (GET_CODE (size) == CONST_INT ! && INTVAL (size) < 10 * STACK_CHECK_PROBE_INTERVAL) { HOST_WIDE_INT offset; diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/expr.c gcc-2.8.1/expr.c *** gcc-2.8.0/expr.c Wed Jan 7 17:44:34 1998 --- gcc-2.8.1/expr.c Tue Mar 3 21:32:19 1998 *************** *** 178,182 **** static tree save_noncopied_parts PROTO((tree, tree)); static tree init_noncopied_parts PROTO((tree, tree)); ! static int safe_from_p PROTO((rtx, tree)); static int fixed_type_p PROTO((tree)); static rtx var_rtx PROTO((tree)); --- 178,182 ---- static tree save_noncopied_parts PROTO((tree, tree)); static tree init_noncopied_parts PROTO((tree, tree)); ! static int safe_from_p PROTO((rtx, tree, int)); static int fixed_type_p PROTO((tree)); static rtx var_rtx PROTO((tree)); *************** *** 1643,1647 **** && ((GET_CODE (size) == CONST_INT && ((unsigned HOST_WIDE_INT) INTVAL (size) ! <= GET_MODE_MASK (mode))) || GET_MODE_BITSIZE (mode) >= BITS_PER_WORD) && (insn_operand_predicate[(int) code][0] == 0 --- 1643,1647 ---- && ((GET_CODE (size) == CONST_INT && ((unsigned HOST_WIDE_INT) INTVAL (size) ! <= (GET_MODE_MASK (mode) >> 1))) || GET_MODE_BITSIZE (mode) >= BITS_PER_WORD) && (insn_operand_predicate[(int) code][0] == 0 *************** *** 2138,2142 **** && ((GET_CODE (size) == CONST_INT && ((unsigned HOST_WIDE_INT) INTVAL (size) ! <= GET_MODE_MASK (mode))) || GET_MODE_BITSIZE (mode) >= BITS_PER_WORD) && (insn_operand_predicate[(int) code][0] == 0 --- 2138,2142 ---- && ((GET_CODE (size) == CONST_INT && ((unsigned HOST_WIDE_INT) INTVAL (size) ! <= (GET_MODE_MASK (mode) >> 1))) || GET_MODE_BITSIZE (mode) >= BITS_PER_WORD) && (insn_operand_predicate[(int) code][0] == 0 *************** *** 2641,2644 **** --- 2641,2645 ---- goto ret; } + /* Try the most limited insn first, because there's no point including more than one in the machine description unless *************** *** 2971,2975 **** && TREE_READONLY (TREE_OPERAND (to, 1))) { ! if (offset = 0) to_rtx = copy_rtx (to_rtx); --- 2972,2976 ---- && TREE_READONLY (TREE_OPERAND (to, 1))) { ! if (offset == 0) to_rtx = copy_rtx (to_rtx); *************** *** 4430,4439 **** else { offset = size_binop (PLUS_EXPR, offset, size_binop (FLOOR_DIV_EXPR, index, size_int (BITS_PER_UNIT))); - - if (contains_placeholder_p (offset)) - offset = build (WITH_RECORD_EXPR, sizetype, offset, exp); } } --- 4431,4440 ---- else { + if (contains_placeholder_p (index)) + index = build (WITH_RECORD_EXPR, sizetype, index, exp); + offset = size_binop (PLUS_EXPR, offset, size_binop (FLOOR_DIV_EXPR, index, size_int (BITS_PER_UNIT))); } } *************** *** 4485,4488 **** --- 4486,4490 ---- { case EXPAND_NORMAL: + case EXPAND_SUM: return MEMORY_USE_RO; break; *************** *** 4493,4500 **** return MEMORY_USE_RW; break; - case EXPAND_INITIALIZER: case EXPAND_MEMORY_USE_DONT: ! case EXPAND_SUM: case EXPAND_CONST_ADDRESS: return MEMORY_USE_DONT; case EXPAND_MEMORY_USE_BAD: --- 4495,4504 ---- return MEMORY_USE_RW; break; case EXPAND_MEMORY_USE_DONT: ! /* EXPAND_CONST_ADDRESS and EXPAND_INITIALIZER are converted into ! MEMORY_USE_DONT, because they are modifiers to a call of ! expand_expr in the ADDR_EXPR case of expand_expr. */ case EXPAND_CONST_ADDRESS: + case EXPAND_INITIALIZER: return MEMORY_USE_DONT; case EXPAND_MEMORY_USE_BAD: *************** *** 4640,4649 **** /* Subroutine of expand_expr: return nonzero iff there is no way that ! EXP can reference X, which is being modified. */ static int ! safe_from_p (x, exp) rtx x; tree exp; { rtx exp_rtl = 0; --- 4644,4656 ---- /* Subroutine of expand_expr: return nonzero iff there is no way that ! EXP can reference X, which is being modified. TOP_P is nonzero if this ! call is going to be used to determine whether we need a temporary ! for EXP, as opposed to a recursive call to this function. */ static int ! safe_from_p (x, exp, top_p) rtx x; tree exp; + int top_p; { rtx exp_rtl = 0; *************** *** 4656,4661 **** So we assume here that something at a higher level has prevented a clash. This is somewhat bogus, but the best we can do. Only ! do this when X is BLKmode. */ ! || (TREE_TYPE (exp) != 0 && TYPE_SIZE (TREE_TYPE (exp)) != 0 && TREE_CODE (TYPE_SIZE (TREE_TYPE (exp))) != INTEGER_CST && (TREE_CODE (TREE_TYPE (exp)) != ARRAY_TYPE --- 4663,4668 ---- So we assume here that something at a higher level has prevented a clash. This is somewhat bogus, but the best we can do. Only ! do this when X is BLKmode and when we are at the top level. */ ! || (top_p && TREE_TYPE (exp) != 0 && TYPE_SIZE (TREE_TYPE (exp)) != 0 && TREE_CODE (TYPE_SIZE (TREE_TYPE (exp))) != INTEGER_CST && (TREE_CODE (TREE_TYPE (exp)) != ARRAY_TYPE *************** *** 4694,4710 **** if (TREE_CODE (exp) == TREE_LIST) return ((TREE_VALUE (exp) == 0 ! || safe_from_p (x, TREE_VALUE (exp))) && (TREE_CHAIN (exp) == 0 ! || safe_from_p (x, TREE_CHAIN (exp)))); else return 0; case '1': ! return safe_from_p (x, TREE_OPERAND (exp, 0)); case '2': case '<': ! return (safe_from_p (x, TREE_OPERAND (exp, 0)) ! && safe_from_p (x, TREE_OPERAND (exp, 1))); case 'e': --- 4701,4717 ---- if (TREE_CODE (exp) == TREE_LIST) return ((TREE_VALUE (exp) == 0 ! || safe_from_p (x, TREE_VALUE (exp), 0)) && (TREE_CHAIN (exp) == 0 ! || safe_from_p (x, TREE_CHAIN (exp), 0))); else return 0; case '1': ! return safe_from_p (x, TREE_OPERAND (exp, 0), 0); case '2': case '<': ! return (safe_from_p (x, TREE_OPERAND (exp, 0), 0) ! && safe_from_p (x, TREE_OPERAND (exp, 1), 0)); case 'e': *************** *** 4719,4723 **** case ADDR_EXPR: return (staticp (TREE_OPERAND (exp, 0)) ! || safe_from_p (x, TREE_OPERAND (exp, 0))); case INDIRECT_REF: --- 4726,4731 ---- case ADDR_EXPR: return (staticp (TREE_OPERAND (exp, 0)) ! || safe_from_p (x, TREE_OPERAND (exp, 0), 0) ! || TREE_STATIC (exp)); case INDIRECT_REF: *************** *** 4754,4758 **** case CLEANUP_POINT_EXPR: ! return safe_from_p (x, TREE_OPERAND (exp, 0)); case SAVE_EXPR: --- 4762,4766 ---- case CLEANUP_POINT_EXPR: ! return safe_from_p (x, TREE_OPERAND (exp, 0), 0); case SAVE_EXPR: *************** *** 4763,4767 **** /* The only operand we look at is operand 1. The rest aren't part of the expression. */ ! return safe_from_p (x, TREE_OPERAND (exp, 1)); case METHOD_CALL_EXPR: --- 4771,4775 ---- /* The only operand we look at is operand 1. The rest aren't part of the expression. */ ! return safe_from_p (x, TREE_OPERAND (exp, 1), 0); case METHOD_CALL_EXPR: *************** *** 4780,4784 **** for (i = 0; i < nops; i++) if (TREE_OPERAND (exp, i) != 0 ! && ! safe_from_p (x, TREE_OPERAND (exp, i))) return 0; } --- 4788,4792 ---- for (i = 0; i < nops; i++) if (TREE_OPERAND (exp, i) != 0 ! && ! safe_from_p (x, TREE_OPERAND (exp, i), 0)) return 0; } *************** *** 5237,5241 **** temp = const0_rtx; else ! temp = assign_temp (type, 0, 0, 0); SAVE_EXPR_RTL (exp) = temp; --- 5245,5249 ---- temp = const0_rtx; else ! temp = assign_temp (type, 3, 0, 0); SAVE_EXPR_RTL (exp) = temp; *************** *** 5262,5265 **** --- 5270,5275 ---- else store_expr (TREE_OPERAND (exp, 0), temp, 0); + + TREE_USED (exp) = 1; } *************** *** 5294,5298 **** /* If there is an object on the head of the placeholder list, ! see if some object in its references is of type TYPE. For further information, see tree.def. */ for (placeholder_expr = placeholder_list; --- 5304,5308 ---- /* If there is an object on the head of the placeholder list, ! see if some object in it of type TYPE or a pointer to it. For further information, see tree.def. */ for (placeholder_expr = placeholder_list; *************** *** 5305,5328 **** tree elt; ! /* See if the object is the type that we want. */ ! if ((TYPE_MAIN_VARIANT (TREE_TYPE ! (TREE_PURPOSE (placeholder_expr))) ! == need_type)) ! object = TREE_PURPOSE (placeholder_expr); - /* Find the outermost reference that is of the type we want. */ for (elt = TREE_PURPOSE (placeholder_expr); ! elt != 0 && object == 0 ! && (TREE_CODE_CLASS (TREE_CODE (elt)) == 'r' ! || TREE_CODE_CLASS (TREE_CODE (elt)) == '1' ! || TREE_CODE_CLASS (TREE_CODE (elt)) == '2' ! || TREE_CODE_CLASS (TREE_CODE (elt)) == 'e'); ! elt = ((TREE_CODE (elt) == COMPOUND_EXPR ! || TREE_CODE (elt) == COND_EXPR) ! ? TREE_OPERAND (elt, 1) : TREE_OPERAND (elt, 0))) ! if (TREE_CODE_CLASS (TREE_CODE (elt)) == 'r' ! && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (elt, 0))) == need_type)) ! object = TREE_OPERAND (elt, 0); if (object != 0) --- 5315,5350 ---- tree elt; ! /* Find the outermost reference that is of the type we want. ! If none, see if any object has a type that is a pointer to ! the type we want. */ ! for (elt = TREE_PURPOSE (placeholder_expr); ! elt != 0 && object == 0; ! elt ! = ((TREE_CODE (elt) == COMPOUND_EXPR ! || TREE_CODE (elt) == COND_EXPR) ! ? TREE_OPERAND (elt, 1) ! : (TREE_CODE_CLASS (TREE_CODE (elt)) == 'r' ! || TREE_CODE_CLASS (TREE_CODE (elt)) == '1' ! || TREE_CODE_CLASS (TREE_CODE (elt)) == '2' ! || TREE_CODE_CLASS (TREE_CODE (elt)) == 'e') ! ? TREE_OPERAND (elt, 0) : 0)) ! if (TYPE_MAIN_VARIANT (TREE_TYPE (elt)) == need_type) ! object = elt; for (elt = TREE_PURPOSE (placeholder_expr); ! elt != 0 && object == 0; ! elt ! = ((TREE_CODE (elt) == COMPOUND_EXPR ! || TREE_CODE (elt) == COND_EXPR) ! ? TREE_OPERAND (elt, 1) ! : (TREE_CODE_CLASS (TREE_CODE (elt)) == 'r' ! || TREE_CODE_CLASS (TREE_CODE (elt)) == '1' ! || TREE_CODE_CLASS (TREE_CODE (elt)) == '2' ! || TREE_CODE_CLASS (TREE_CODE (elt)) == 'e') ! ? TREE_OPERAND (elt, 0) : 0)) ! if (POINTER_TYPE_P (TREE_TYPE (elt)) ! && (TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (elt))) == need_type)) ! object = build1 (INDIRECT_REF, need_type, elt); if (object != 0) *************** *** 5434,5438 **** else if ((TREE_STATIC (exp) && ((mode == BLKmode ! && ! (target != 0 && safe_from_p (target, exp))) || TREE_ADDRESSABLE (exp) || (TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST --- 5456,5460 ---- else if ((TREE_STATIC (exp) && ((mode == BLKmode ! && ! (target != 0 && safe_from_p (target, exp, 1))) || TREE_ADDRESSABLE (exp) || (TREE_CODE (TYPE_SIZE (type)) == INTEGER_CST *************** *** 5461,5465 **** /* Handle calls that pass values in multiple non-contiguous locations. The Irix 6 ABI has examples of this. */ ! if (target == 0 || ! safe_from_p (target, exp) || GET_CODE (target) == PARALLEL) { --- 5483,5487 ---- /* Handle calls that pass values in multiple non-contiguous locations. The Irix 6 ABI has examples of this. */ ! if (target == 0 || ! safe_from_p (target, exp, 1) || GET_CODE (target) == PARALLEL) { *************** *** 5657,5662 **** { int bitsize = DECL_FIELD_SIZE (TREE_PURPOSE (elt)); - enum machine_mode imode - = TYPE_MODE (TREE_TYPE (TREE_PURPOSE (elt))); if (TREE_UNSIGNED (TREE_TYPE (TREE_PURPOSE (elt)))) --- 5679,5682 ---- *************** *** 5667,5672 **** else { tree count ! = build_int_2 (imode - bitsize, 0); op0 = expand_shift (LSHIFT_EXPR, imode, op0, count, --- 5687,5695 ---- else { + enum machine_mode imode + = TYPE_MODE (TREE_TYPE (TREE_PURPOSE (elt))); tree count ! = build_int_2 (GET_MODE_BITSIZE (imode) - bitsize, ! 0); op0 = expand_shift (LSHIFT_EXPR, imode, op0, count, *************** *** 5708,5712 **** ? target : NULL_RTX), VOIDmode, ! modifier == EXPAND_INITIALIZER ? modifier : 0); /* If this is a constant, put it into a register if it is a --- 5731,5736 ---- ? target : NULL_RTX), VOIDmode, ! modifier == EXPAND_INITIALIZER ! ? modifier : EXPAND_NORMAL); /* If this is a constant, put it into a register if it is a *************** *** 6193,6197 **** preexpand_calls (exp); ! if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1))) subtarget = 0; --- 6217,6221 ---- preexpand_calls (exp); ! if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1), 1)) subtarget = 0; *************** *** 6338,6342 **** } ! if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1))) subtarget = 0; --- 6362,6366 ---- } ! if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1), 1)) subtarget = 0; *************** *** 6421,6425 **** case EXACT_DIV_EXPR: preexpand_calls (exp); ! if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1))) subtarget = 0; /* Possible optimization: compute the dividend with EXPAND_SUM --- 6445,6449 ---- case EXACT_DIV_EXPR: preexpand_calls (exp); ! if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1), 1)) subtarget = 0; /* Possible optimization: compute the dividend with EXPAND_SUM *************** *** 6439,6443 **** case ROUND_MOD_EXPR: preexpand_calls (exp); ! if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1))) subtarget = 0; op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, 0); --- 6463,6467 ---- case ROUND_MOD_EXPR: preexpand_calls (exp); ! if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1), 1)) subtarget = 0; op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, 0); *************** *** 6491,6500 **** return expand_abs (mode, op0, target, unsignedp, ! safe_from_p (target, TREE_OPERAND (exp, 0))); case MAX_EXPR: case MIN_EXPR: target = original_target; ! if (target == 0 || ! safe_from_p (target, TREE_OPERAND (exp, 1)) || (GET_CODE (target) == MEM && MEM_VOLATILE_P (target)) || GET_MODE (target) != mode --- 6515,6524 ---- return expand_abs (mode, op0, target, unsignedp, ! safe_from_p (target, TREE_OPERAND (exp, 0), 1)); case MAX_EXPR: case MIN_EXPR: target = original_target; ! if (target == 0 || ! safe_from_p (target, TREE_OPERAND (exp, 1), 1) || (GET_CODE (target) == MEM && MEM_VOLATILE_P (target)) || GET_MODE (target) != mode *************** *** 6611,6615 **** case RROTATE_EXPR: preexpand_calls (exp); ! if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1))) subtarget = 0; op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, 0); --- 6635,6639 ---- case RROTATE_EXPR: preexpand_calls (exp); ! if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1), 1)) subtarget = 0; op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, 0); *************** *** 6659,6663 **** case TRUTH_ORIF_EXPR: if (! ignore ! && (target == 0 || ! safe_from_p (target, exp) /* Make sure we don't have a hard reg (such as function's return value) live across basic blocks, if not optimizing. */ --- 6683,6687 ---- case TRUTH_ORIF_EXPR: if (! ignore ! && (target == 0 || ! safe_from_p (target, exp, 1) /* Make sure we don't have a hard reg (such as function's return value) live across basic blocks, if not optimizing. */ *************** *** 6787,6791 **** temp = 0; else if (original_target ! && (safe_from_p (original_target, TREE_OPERAND (exp, 0)) || (singleton && GET_CODE (original_target) == REG && REGNO (original_target) >= FIRST_PSEUDO_REGISTER --- 6811,6815 ---- temp = 0; else if (original_target ! && (safe_from_p (original_target, TREE_OPERAND (exp, 0), 1) || (singleton && GET_CODE (original_target) == REG && REGNO (original_target) >= FIRST_PSEUDO_REGISTER *************** *** 6831,6835 **** result = do_store_flag (TREE_OPERAND (exp, 0), ! (safe_from_p (temp, singleton) ? temp : NULL_RTX), mode, BRANCH_COST <= 1); --- 6855,6859 ---- result = do_store_flag (TREE_OPERAND (exp, 0), ! (safe_from_p (temp, singleton, 1) ? temp : NULL_RTX), mode, BRANCH_COST <= 1); *************** *** 6841,6845 **** (binary_op, 1)), 0), ! (safe_from_p (temp, singleton) ? temp : NULL_RTX), 0); --- 6865,6869 ---- (binary_op, 1)), 0), ! (safe_from_p (temp, singleton, 1) ? temp : NULL_RTX), 0); *************** *** 6868,6872 **** might clobber it. */ if ((binary_op ! && ! safe_from_p (temp, TREE_OPERAND (binary_op, 1))) || (GET_CODE (temp) == REG && REGNO (temp) < FIRST_PSEUDO_REGISTER)) --- 6892,6896 ---- might clobber it. */ if ((binary_op ! && ! safe_from_p (temp, TREE_OPERAND (binary_op, 1), 1)) || (GET_CODE (temp) == REG && REGNO (temp) < FIRST_PSEUDO_REGISTER)) *************** *** 6909,6913 **** && (! TREE_SIDE_EFFECTS (TREE_OPERAND (exp, 0)) || TREE_CODE (TREE_OPERAND (exp, 1)) == SAVE_EXPR) ! && safe_from_p (temp, TREE_OPERAND (exp, 2))) { if (GET_CODE (temp) == REG && REGNO (temp) < FIRST_PSEUDO_REGISTER) --- 6933,6937 ---- && (! TREE_SIDE_EFFECTS (TREE_OPERAND (exp, 0)) || TREE_CODE (TREE_OPERAND (exp, 1)) == SAVE_EXPR) ! && safe_from_p (temp, TREE_OPERAND (exp, 2), 1)) { if (GET_CODE (temp) == REG && REGNO (temp) < FIRST_PSEUDO_REGISTER) *************** *** 6927,6931 **** && (! TREE_SIDE_EFFECTS (TREE_OPERAND (exp, 0)) || TREE_CODE (TREE_OPERAND (exp, 2)) == SAVE_EXPR) ! && safe_from_p (temp, TREE_OPERAND (exp, 1))) { if (GET_CODE (temp) == REG && REGNO (temp) < FIRST_PSEUDO_REGISTER) --- 6951,6955 ---- && (! TREE_SIDE_EFFECTS (TREE_OPERAND (exp, 0)) || TREE_CODE (TREE_OPERAND (exp, 2)) == SAVE_EXPR) ! && safe_from_p (temp, TREE_OPERAND (exp, 1), 1)) { if (GET_CODE (temp) == REG && REGNO (temp) < FIRST_PSEUDO_REGISTER) *************** *** 7062,7065 **** --- 7086,7090 ---- TREE_OPERAND (exp, 1) = NULL_TREE; + TREE_USED (slot) = 1; store_expr (exp1, target, 0); *************** *** 7176,7180 **** if (TREE_CODE (TREE_OPERAND (exp, 0)) == FUNCTION_DECL && decl_function_context (TREE_OPERAND (exp, 0)) != 0 ! && ! DECL_NO_STATIC_CHAIN (TREE_OPERAND (exp, 0))) { op0 = trampoline_address (TREE_OPERAND (exp, 0)); --- 7201,7206 ---- if (TREE_CODE (TREE_OPERAND (exp, 0)) == FUNCTION_DECL && decl_function_context (TREE_OPERAND (exp, 0)) != 0 ! && ! DECL_NO_STATIC_CHAIN (TREE_OPERAND (exp, 0)) ! && ! TREE_STATIC (exp)) { op0 = trampoline_address (TREE_OPERAND (exp, 0)); *************** *** 7390,7394 **** binop: preexpand_calls (exp); ! if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1))) subtarget = 0; op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, 0); --- 7416,7420 ---- binop: preexpand_calls (exp); ! if (! safe_from_p (subtarget, TREE_OPERAND (exp, 1), 1)) subtarget = 0; op0 = expand_expr (TREE_OPERAND (exp, 0), subtarget, VOIDmode, 0); *************** *** 7932,7936 **** unsigned align, inner; ! if (TREE_CODE (TREE_TYPE (exp)) != POINTER_TYPE) return 0; --- 7958,7962 ---- unsigned align, inner; ! if (! POINTER_TYPE_P (TREE_TYPE (exp))) return 0; *************** *** 7946,7951 **** case NON_LVALUE_EXPR: exp = TREE_OPERAND (exp, 0); ! if (TREE_CODE (TREE_TYPE (exp)) != POINTER_TYPE) return align; inner = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (exp))); align = MIN (inner, max_align); --- 7972,7978 ---- case NON_LVALUE_EXPR: exp = TREE_OPERAND (exp, 0); ! if (! POINTER_TYPE_P (TREE_TYPE (exp))) return align; + inner = TYPE_ALIGN (TREE_TYPE (TREE_TYPE (exp))); align = MIN (inner, max_align); *************** *** 8503,8509 **** if (arglist == 0 /* Arg could be non-pointer if user redeclared this fcn wrong. */ ! || TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE || TREE_CHAIN (arglist) == 0 ! || TREE_CODE (TREE_TYPE (TREE_VALUE (TREE_CHAIN (arglist)))) != POINTER_TYPE || TREE_CHAIN (TREE_CHAIN (arglist)) == 0 || TREE_CODE (TREE_TYPE (TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist))))) != INTEGER_TYPE) --- 8530,8536 ---- if (arglist == 0 /* Arg could be non-pointer if user redeclared this fcn wrong. */ ! || ! POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (arglist))) || TREE_CHAIN (arglist) == 0 ! || ! POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (TREE_CHAIN (arglist)))) || TREE_CHAIN (TREE_CHAIN (arglist)) == 0 || TREE_CODE (TREE_TYPE (TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist))))) != INTEGER_TYPE) *************** *** 8527,8531 **** if (arglist /* Arg could be non-pointer if user redeclared this fcn wrong. */ ! && TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) == POINTER_TYPE) expand_builtin_return (expand_expr (TREE_VALUE (arglist), NULL_RTX, VOIDmode, 0)); --- 8554,8558 ---- if (arglist /* Arg could be non-pointer if user redeclared this fcn wrong. */ ! && POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (arglist)))) expand_builtin_return (expand_expr (TREE_VALUE (arglist), NULL_RTX, VOIDmode, 0)); *************** *** 8833,8837 **** if (arglist == 0 /* Arg could be non-pointer if user redeclared this fcn wrong. */ ! || TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE) break; else --- 8860,8864 ---- if (arglist == 0 /* Arg could be non-pointer if user redeclared this fcn wrong. */ ! || ! POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (arglist)))) break; else *************** *** 8922,8928 **** if (arglist == 0 /* Arg could be non-pointer if user redeclared this fcn wrong. */ ! || TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE || TREE_CHAIN (arglist) == 0 ! || TREE_CODE (TREE_TYPE (TREE_VALUE (TREE_CHAIN (arglist)))) != POINTER_TYPE) break; else --- 8949,8955 ---- if (arglist == 0 /* Arg could be non-pointer if user redeclared this fcn wrong. */ ! || ! POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (arglist))) || TREE_CHAIN (arglist) == 0 ! || ! POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (TREE_CHAIN (arglist))))) break; else *************** *** 8946,8953 **** if (arglist == 0 /* Arg could be non-pointer if user redeclared this fcn wrong. */ ! || TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE || TREE_CHAIN (arglist) == 0 ! || (TREE_CODE (TREE_TYPE (TREE_VALUE (TREE_CHAIN (arglist)))) ! != POINTER_TYPE) || TREE_CHAIN (TREE_CHAIN (arglist)) == 0 || (TREE_CODE (TREE_TYPE (TREE_VALUE --- 8973,8979 ---- if (arglist == 0 /* Arg could be non-pointer if user redeclared this fcn wrong. */ ! || ! POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (arglist))) || TREE_CHAIN (arglist) == 0 ! || ! POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (TREE_CHAIN (arglist)))) || TREE_CHAIN (TREE_CHAIN (arglist)) == 0 || (TREE_CODE (TREE_TYPE (TREE_VALUE *************** *** 9021,9025 **** if (arglist == 0 /* Arg could be non-pointer if user redeclared this fcn wrong. */ ! || TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE || TREE_CHAIN (arglist) == 0 || (TREE_CODE (TREE_TYPE (TREE_VALUE (TREE_CHAIN (arglist)))) --- 9047,9051 ---- if (arglist == 0 /* Arg could be non-pointer if user redeclared this fcn wrong. */ ! || ! POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (arglist))) || TREE_CHAIN (arglist) == 0 || (TREE_CODE (TREE_TYPE (TREE_VALUE (TREE_CHAIN (arglist)))) *************** *** 9094,9100 **** if (arglist == 0 /* Arg could be non-pointer if user redeclared this fcn wrong. */ ! || TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE || TREE_CHAIN (arglist) == 0 ! || TREE_CODE (TREE_TYPE (TREE_VALUE (TREE_CHAIN (arglist)))) != POINTER_TYPE) break; else if (!HAVE_cmpstrsi) --- 9120,9126 ---- if (arglist == 0 /* Arg could be non-pointer if user redeclared this fcn wrong. */ ! || ! POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (arglist))) || TREE_CHAIN (arglist) == 0 ! || ! POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (TREE_CHAIN (arglist))))) break; else if (!HAVE_cmpstrsi) *************** *** 9151,9157 **** if (arglist == 0 /* Arg could be non-pointer if user redeclared this fcn wrong. */ ! || TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE || TREE_CHAIN (arglist) == 0 ! || TREE_CODE (TREE_TYPE (TREE_VALUE (TREE_CHAIN (arglist)))) != POINTER_TYPE || TREE_CHAIN (TREE_CHAIN (arglist)) == 0 || TREE_CODE (TREE_TYPE (TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist))))) != INTEGER_TYPE) --- 9177,9183 ---- if (arglist == 0 /* Arg could be non-pointer if user redeclared this fcn wrong. */ ! || ! POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (arglist))) || TREE_CHAIN (arglist) == 0 ! || ! POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (TREE_CHAIN (arglist)))) || TREE_CHAIN (TREE_CHAIN (arglist)) == 0 || TREE_CODE (TREE_TYPE (TREE_VALUE (TREE_CHAIN (TREE_CHAIN (arglist))))) != INTEGER_TYPE) *************** *** 9219,9223 **** case BUILT_IN_SETJMP: if (arglist == 0 ! || TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE) break; --- 9245,9249 ---- case BUILT_IN_SETJMP: if (arglist == 0 ! || ! POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (arglist)))) break; *************** *** 9233,9237 **** case BUILT_IN_LONGJMP: if (arglist == 0 || TREE_CHAIN (arglist) == 0 ! || TREE_CODE (TREE_TYPE (TREE_VALUE (arglist))) != POINTER_TYPE) break; --- 9259,9263 ---- case BUILT_IN_LONGJMP: if (arglist == 0 || TREE_CHAIN (arglist) == 0 ! || ! POINTER_TYPE_P (TREE_TYPE (TREE_VALUE (arglist)))) break; *************** *** 9277,9280 **** --- 9303,9307 ---- assemble_external (dummy_decl); + TREE_USED (dummy_decl) = 1; /* Pick up FP, label, and SP from the block and jump. This code is *************** *** 10875,10879 **** be reliably compared, then canonicalize them. */ if (HAVE_canonicalize_funcptr_for_compare ! && TREE_CODE (TREE_TYPE (TREE_OPERAND (exp, 0))) == POINTER_TYPE && (TREE_CODE (TREE_TYPE (TREE_TYPE (TREE_OPERAND (exp, 0)))) == FUNCTION_TYPE)) --- 10902,10906 ---- be reliably compared, then canonicalize them. */ if (HAVE_canonicalize_funcptr_for_compare ! && POINTER_TYPE_P (TREE_TYPE (TREE_OPERAND (exp, 0))) && (TREE_CODE (TREE_TYPE (TREE_TYPE (TREE_OPERAND (exp, 0)))) == FUNCTION_TYPE)) *************** *** 10886,10890 **** if (HAVE_canonicalize_funcptr_for_compare ! && TREE_CODE (TREE_TYPE (TREE_OPERAND (exp, 1))) == POINTER_TYPE && (TREE_CODE (TREE_TYPE (TREE_TYPE (TREE_OPERAND (exp, 1)))) == FUNCTION_TYPE)) --- 10913,10917 ---- if (HAVE_canonicalize_funcptr_for_compare ! && POINTER_TYPE_P (TREE_TYPE (TREE_OPERAND (exp, 1))) && (TREE_CODE (TREE_TYPE (TREE_TYPE (TREE_OPERAND (exp, 1)))) == FUNCTION_TYPE)) *************** *** 11035,11042 **** #ifdef HAVE_canonicalize_funcptr_for_compare if (HAVE_canonicalize_funcptr_for_compare ! && ((TREE_CODE (TREE_TYPE (TREE_OPERAND (exp, 0))) == POINTER_TYPE && (TREE_CODE (TREE_TYPE (TREE_TYPE (TREE_OPERAND (exp, 0)))) == FUNCTION_TYPE)) ! || (TREE_CODE (TREE_TYPE (TREE_OPERAND (exp, 1))) == POINTER_TYPE && (TREE_CODE (TREE_TYPE (TREE_TYPE (TREE_OPERAND (exp, 1)))) == FUNCTION_TYPE)))) --- 11062,11069 ---- #ifdef HAVE_canonicalize_funcptr_for_compare if (HAVE_canonicalize_funcptr_for_compare ! && ((POINTER_TYPE_P (TREE_TYPE (TREE_OPERAND (exp, 0))) && (TREE_CODE (TREE_TYPE (TREE_TYPE (TREE_OPERAND (exp, 0)))) == FUNCTION_TYPE)) ! || (POINTER_TYPE_P (TREE_TYPE (TREE_OPERAND (exp, 1))) && (TREE_CODE (TREE_TYPE (TREE_TYPE (TREE_OPERAND (exp, 1)))) == FUNCTION_TYPE)))) *************** *** 11137,11141 **** if (subtarget == 0 || GET_CODE (subtarget) != REG || GET_MODE (subtarget) != operand_mode ! || ! safe_from_p (subtarget, inner)) subtarget = 0; --- 11164,11168 ---- if (subtarget == 0 || GET_CODE (subtarget) != REG || GET_MODE (subtarget) != operand_mode ! || ! safe_from_p (subtarget, inner, 1)) subtarget = 0; *************** *** 11187,11191 **** if (subtarget == 0 || GET_CODE (subtarget) != REG || GET_MODE (subtarget) != operand_mode ! || ! safe_from_p (subtarget, arg1)) subtarget = 0; --- 11214,11218 ---- if (subtarget == 0 || GET_CODE (subtarget) != REG || GET_MODE (subtarget) != operand_mode ! || ! safe_from_p (subtarget, arg1, 1)) subtarget = 0; diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/expr.h gcc-2.8.1/expr.h *** gcc-2.8.0/expr.h Sat Oct 18 09:34:48 1997 --- gcc-2.8.1/expr.h Sat Feb 14 06:41:05 1998 *************** *** 1,4 **** /* Definitions for code generation pass of GNU compiler. ! Copyright (C) 1987, 91-96, 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* Definitions for code generation pass of GNU compiler. ! Copyright (C) 1987, 91-97, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 139,143 **** struct args_size { ! int constant; tree var; }; --- 139,143 ---- struct args_size { ! HOST_WIDE_INT constant; tree var; }; *************** *** 417,421 **** extern rtx setjmp_libfunc; extern rtx longjmp_libfunc; - extern rtx get_dynamic_handler_chain_libfunc; extern rtx eqhf2_libfunc; --- 417,420 ---- diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/extend.texi gcc-2.8.1/extend.texi *** gcc-2.8.0/extend.texi Wed Dec 31 18:39:37 1997 --- gcc-2.8.1/extend.texi Tue Feb 17 13:46:18 1998 *************** *** 2020,2025 **** @smallexample ! struct S @{ short f[3]; @} __attribute__ ((aligned (8)); ! typedef int more_aligned_int __attribute__ ((aligned (8)); @end smallexample --- 2020,2025 ---- @smallexample ! struct S @{ short f[3]; @} __attribute__ ((aligned (8))); ! typedef int more_aligned_int __attribute__ ((aligned (8))); @end smallexample *************** *** 2727,2740 **** example, some 68000 operating systems call this register @code{%a5}. - Eventually there may be a way of asking the compiler to choose a register - automatically, but first we need to figure out how it should choose and - how to enable you to guide the choice. No solution is evident. - Defining such a register variable does not reserve the register; it remains available for other uses in places where flow control determines the variable's value is not live. However, these registers are made ! unavailable for use in the reload pass. I would not be surprised if ! excessive use of this feature leaves the compiler too few available ! registers to compile certain functions. @node Alternate Keywords --- 2727,2741 ---- example, some 68000 operating systems call this register @code{%a5}. Defining such a register variable does not reserve the register; it remains available for other uses in places where flow control determines the variable's value is not live. However, these registers are made ! unavailable for use in the reload pass; excessive use of this feature ! leaves the compiler too few available registers to compile certain ! functions. ! ! This option does not guarantee that GNU CC will generate code that has ! this variable in the register you specify at all times. You may not ! code an explicit reference to this register in an @code{asm} statement ! and assume it will always refer to this variable. @node Alternate Keywords diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/fixincludes gcc-2.8.1/fixincludes *** gcc-2.8.0/fixincludes Mon Dec 22 19:16:03 1997 --- gcc-2.8.1/fixincludes Thu Feb 26 15:44:37 1998 *************** *** 253,259 **** # won't be able to handle it. # ! # We use the pattern [!-.0-~] instead of [^/ ] to match a noncomment # following #else or #endif because some buggy egreps think [^/] matches # newline, and they thus think `#else ' matches `#e[ndiflse]*[ ]+[^/ ]'. # # We use the pattern [^a-zA-Z0-9_][_a-ce-km-z][a-z0-9] to match an identifier --- 253,260 ---- # won't be able to handle it. # ! # We use the pattern [!-.0-z{|}~] instead of [^/ ] to match a noncomment # following #else or #endif because some buggy egreps think [^/] matches # newline, and they thus think `#else ' matches `#e[ndiflse]*[ ]+[^/ ]'. + # [!-.0-~] does not work properly on AIX 4.1. # # We use the pattern [^a-zA-Z0-9_][_a-ce-km-z][a-z0-9] to match an identifier *************** *** 264,268 **** # performance, since many files contain lines of the form `#if ... defined ...' # or `#if lint'. ! if egrep '//|[ _]_IO|CTRL|^#define.NULL|^#e[nl][ds][ief]*[ ]+[!-.0-~]|^#[el]*if.*[^a-zA-Z0-9_][_a-ce-km-zA-Z][a-zA-Z0-9]' $file >/dev/null; then if [ -r $file ]; then cp $file $2/$file >/dev/null 2>&1 \ --- 265,269 ---- # performance, since many files contain lines of the form `#if ... defined ...' # or `#if lint'. ! if egrep '//|[ _]_IO|CTRL|^#define.NULL|^#e[nl][ds][ief]*[ ]+[!-.0-z\{\|\}\~]|^#[el]*if.*[^a-zA-Z0-9_][_a-ce-km-zA-Z][a-zA-Z0-9]' $file >/dev/null; then if [ -r $file ]; then cp $file $2/$file >/dev/null 2>&1 \ *************** *** 923,926 **** --- 924,931 ---- if [ -r ${LIB}/$file ]; then echo Fixing $file + if grep _GCC_SIZE_T ${LIB}/$file >/dev/null + then size_t_pattern='<<< do not double-wrap the size_t typedef >>>' + else size_t_pattern='typedef[ a-zA-Z_]*[ ]size_t[ ]*;' + fi sed -e 's/int abort/void abort/g' \ -e 's/int free/void free/g' \ *************** *** 929,937 **** -e 's/char[ ]*\*[ ]*realloc/void \* realloc/g' \ -e 's/int[ ][ ]*exit/void exit/g' \ ! -e '/typedef[ a-zA-Z_]*[ ]size_t[ ]*;/i\ #ifndef _GCC_SIZE_T\ #define _GCC_SIZE_T ' \ ! -e '/typedef[ a-zA-Z_]*[ ]size_t[ ]*;/a\ #endif ' \ --- 934,942 ---- -e 's/char[ ]*\*[ ]*realloc/void \* realloc/g' \ -e 's/int[ ][ ]*exit/void exit/g' \ ! -e "/$size_t_pattern/"'i\ #ifndef _GCC_SIZE_T\ #define _GCC_SIZE_T ' \ ! -e "/$size_t_pattern/"'a\ #endif ' \ *************** *** 1856,1859 **** --- 1861,1865 ---- # we find a #ifndef FLT_MIN we assume that all the required #ifndefs # are there, and we do not add them ourselves. + # Also fix a nested comment problem in sys/limits.h on Motorola sysV68 R3V7.1 for file in limits.h sys/limits.h; do if [ -r $file ] && [ ! -r ${LIB}/$file ]; then *************** *** 1905,1908 **** --- 1911,1915 ---- #endif '\ + -e '/^\(\/\*#define HUGE_VAL 3\.[0-9e+]* *\)\/\*/s//\1/'\ ${LIB}/$file > ${LIB}/${file}.sed rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file *************** *** 2881,2885 **** # sys/lc_core.h on some versions of OSF1/4.x pollutes the namespace by ! # defining regex.h related types. This causes libg++ build and usage failures. # Fixing this correctly requires checking and modifying 3 files. for file in reg_types.h regex.h sys/lc_core.h; do --- 2888,2892 ---- # sys/lc_core.h on some versions of OSF1/4.x pollutes the namespace by ! # defining regex.h types. This causes C++ library build and usage failures. # Fixing this correctly requires checking and modifying 3 files. for file in reg_types.h regex.h sys/lc_core.h; do diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/fold-const.c gcc-2.8.1/fold-const.c *** gcc-2.8.0/fold-const.c Mon Dec 8 08:06:45 1997 --- gcc-2.8.1/fold-const.c Sat Feb 28 15:58:15 1998 *************** *** 1,4 **** /* Fold a constant sub-tree into a single node for C-compiler ! Copyright (C) 1987, 88, 92-96, 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* Fold a constant sub-tree into a single node for C-compiler ! Copyright (C) 1987, 88, 92-97, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 176,180 **** high = TREE_INT_CST_HIGH (t); ! if (TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE) prec = POINTER_SIZE; else --- 176,180 ---- high = TREE_INT_CST_HIGH (t); ! if (POINTER_TYPE_P (TREE_TYPE (t))) prec = POINTER_SIZE; else *************** *** 1494,1498 **** int overflow = 0; ! if (TREE_CODE (type) == POINTER_TYPE || INTEGRAL_TYPE_P (type)) { if (TREE_CODE (arg1) == INTEGER_CST) --- 1494,1498 ---- int overflow = 0; ! if (POINTER_TYPE_P (type) || INTEGRAL_TYPE_P (type)) { if (TREE_CODE (arg1) == INTEGER_CST) *************** *** 1514,1523 **** But don't indicate an overflow if converting a pointer. */ TREE_OVERFLOW (t) ! = (TREE_OVERFLOW (arg1) ! || (force_fit_type (t, ! (TREE_INT_CST_HIGH (arg1) < 0 ! & (TREE_UNSIGNED (type) ! < TREE_UNSIGNED (TREE_TYPE (arg1))))) ! && TREE_CODE (TREE_TYPE (arg1)) != POINTER_TYPE)); TREE_CONSTANT_OVERFLOW (t) = TREE_OVERFLOW (t) | TREE_CONSTANT_OVERFLOW (arg1); --- 1514,1523 ---- But don't indicate an overflow if converting a pointer. */ TREE_OVERFLOW (t) ! = ((force_fit_type (t, ! (TREE_INT_CST_HIGH (arg1) < 0 ! & (TREE_UNSIGNED (type) ! < TREE_UNSIGNED (TREE_TYPE (arg1))))) ! && ! POINTER_TYPE_P (TREE_TYPE (arg1))) ! || TREE_OVERFLOW (arg1)); TREE_CONSTANT_OVERFLOW (t) = TREE_OVERFLOW (t) | TREE_CONSTANT_OVERFLOW (arg1); *************** *** 5029,5033 **** This optimization is invalid for floating point due to rounding. For pointer types we assume overflow doesn't happen. */ ! if (TREE_CODE (TREE_TYPE (varop)) == POINTER_TYPE || (! FLOAT_TYPE_P (TREE_TYPE (varop)) && (code == EQ_EXPR || code == NE_EXPR))) --- 5029,5033 ---- This optimization is invalid for floating point due to rounding. For pointer types we assume overflow doesn't happen. */ ! if (POINTER_TYPE_P (TREE_TYPE (varop)) || (! FLOAT_TYPE_P (TREE_TYPE (varop)) && (code == EQ_EXPR || code == NE_EXPR))) *************** *** 5064,5068 **** else if (constop && TREE_CODE (varop) == POSTDECREMENT_EXPR) { ! if (TREE_CODE (TREE_TYPE (varop)) == POINTER_TYPE || (! FLOAT_TYPE_P (TREE_TYPE (varop)) && (code == EQ_EXPR || code == NE_EXPR))) --- 5064,5068 ---- else if (constop && TREE_CODE (varop) == POSTDECREMENT_EXPR) { ! if (POINTER_TYPE_P (TREE_TYPE (varop)) || (! FLOAT_TYPE_P (TREE_TYPE (varop)) && (code == EQ_EXPR || code == NE_EXPR))) *************** *** 5258,5262 **** if (integer_zerop (arg1) && (INTEGRAL_TYPE_P (TREE_TYPE (arg1)) ! || TREE_CODE (TREE_TYPE (arg1)) == POINTER_TYPE) && TREE_UNSIGNED (TREE_TYPE (arg1))) { --- 5258,5262 ---- if (integer_zerop (arg1) && (INTEGRAL_TYPE_P (TREE_TYPE (arg1)) ! || POINTER_TYPE_P (TREE_TYPE (arg1))) && TREE_UNSIGNED (TREE_TYPE (arg1))) { *************** *** 5293,5297 **** && TREE_INT_CST_HIGH (arg1) == 0 && (INTEGRAL_TYPE_P (TREE_TYPE (arg1)) ! || TREE_CODE (TREE_TYPE (arg1)) == POINTER_TYPE) && TREE_UNSIGNED (TREE_TYPE (arg1))) { --- 5293,5297 ---- && TREE_INT_CST_HIGH (arg1) == 0 && (INTEGRAL_TYPE_P (TREE_TYPE (arg1)) ! || POINTER_TYPE_P (TREE_TYPE (arg1))) && TREE_UNSIGNED (TREE_TYPE (arg1))) { diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/function.c gcc-2.8.1/function.c *** gcc-2.8.0/function.c Wed Jan 7 17:45:08 1998 --- gcc-2.8.1/function.c Sat Feb 28 15:58:16 1998 *************** *** 356,360 **** rtx address; /* The size, in units, of the slot. */ ! int size; /* The value of `sequence_rtl_expr' when this temporary is allocated. */ tree rtl_expr; --- 356,360 ---- rtx address; /* The size, in units, of the slot. */ ! HOST_WIDE_INT size; /* The value of `sequence_rtl_expr' when this temporary is allocated. */ tree rtl_expr; *************** *** 369,376 **** /* The offset of the slot from the frame_pointer, including extra space for alignment. This info is for combine_temp_slots. */ ! int base_offset; /* The size of the slot, including extra space for alignment. This info is for combine_temp_slots. */ ! int full_size; }; --- 369,376 ---- /* The offset of the slot from the frame_pointer, including extra space for alignment. This info is for combine_temp_slots. */ ! HOST_WIDE_INT base_offset; /* The size of the slot, including extra space for alignment. This info is for combine_temp_slots. */ ! HOST_WIDE_INT full_size; }; *************** *** 382,385 **** --- 382,389 ---- int temp_slot_level; + + /* Current nesting level for variables in a block. */ + + int var_temp_slot_level; /* The FUNCTION_DECL node for the current function. */ *************** *** 425,429 **** static void put_reg_into_stack PROTO((struct function *, rtx, tree, enum machine_mode, enum machine_mode, ! int, int)); static void fixup_var_refs PROTO((rtx, enum machine_mode, int)); static struct fixup_replacement --- 429,433 ---- static void put_reg_into_stack PROTO((struct function *, rtx, tree, enum machine_mode, enum machine_mode, ! int, int, int)); static void fixup_var_refs PROTO((rtx, enum machine_mode, int)); static struct fixup_replacement *************** *** 465,471 **** --- 469,477 ---- { struct function *p; + for (p = outer_function_chain; p; p = p->next) if (p->decl == decl) return p; + abort (); } *************** *** 530,533 **** --- 536,541 ---- p->temp_slots = temp_slots; p->temp_slot_level = temp_slot_level; + p->target_temp_slot_level = target_temp_slot_level; + p->var_temp_slot_level = var_temp_slot_level; p->fixup_var_refs_queue = 0; p->epilogue_delay_list = current_function_epilogue_delay_list; *************** *** 537,547 **** save_storage_status (p); save_emit_status (p); - init_emit (); save_expr_status (p); save_stmt_status (p); save_varasm_status (p, context); - if (save_machine_status) (*save_machine_status) (p); } --- 545,555 ---- save_storage_status (p); save_emit_status (p); save_expr_status (p); save_stmt_status (p); save_varasm_status (p, context); if (save_machine_status) (*save_machine_status) (p); + + init_emit (); } *************** *** 560,563 **** --- 568,572 ---- { struct function *p = outer_function_chain; + struct var_refs_queue *queue; outer_function_chain = p->next; *************** *** 610,613 **** --- 619,624 ---- temp_slots = p->temp_slots; temp_slot_level = p->temp_slot_level; + target_temp_slot_level = p->target_temp_slot_level; + var_temp_slot_level = p->var_temp_slot_level; current_function_epilogue_delay_list = p->epilogue_delay_list; reg_renumber = 0; *************** *** 626,634 **** /* Finish doing put_var_into_stack for any of our variables which became addressable during the nested function. */ ! { ! struct var_refs_queue *queue = p->fixup_var_refs_queue; ! for (; queue; queue = queue->next) ! fixup_var_refs (queue->modified, queue->promoted_mode, queue->unsignedp); ! } free (p); --- 637,642 ---- /* Finish doing put_var_into_stack for any of our variables which became addressable during the nested function. */ ! for (queue = p->fixup_var_refs_queue; queue; queue = queue->next) ! fixup_var_refs (queue->modified, queue->promoted_mode, queue->unsignedp); free (p); *************** *** 673,677 **** assign_stack_local (mode, size, align) enum machine_mode mode; ! int size; int align; { --- 681,685 ---- assign_stack_local (mode, size, align) enum machine_mode mode; ! HOST_WIDE_INT size; int align; { *************** *** 742,746 **** assign_outer_stack_local (mode, size, align, function) enum machine_mode mode; ! int size; int align; struct function *function; --- 750,754 ---- assign_outer_stack_local (mode, size, align, function) enum machine_mode mode; ! HOST_WIDE_INT size; int align; struct function *function; *************** *** 810,820 **** KEEP is 1 if this slot is to be retained after a call to free_temp_slots. Automatic variables for a block are allocated ! with this flag. KEEP is 2, if we allocate a longer term temporary, ! whose lifetime is controlled by CLEANUP_POINT_EXPRs. */ rtx assign_stack_temp (mode, size, keep) enum machine_mode mode; ! int size; int keep; { --- 818,830 ---- KEEP is 1 if this slot is to be retained after a call to free_temp_slots. Automatic variables for a block are allocated ! with this flag. KEEP is 2 if we allocate a longer term temporary, ! whose lifetime is controlled by CLEANUP_POINT_EXPRs. KEEP is 3 ! if we are to allocate something at an inner level to be treated as ! a variable in the block (e.g., a SAVE_EXPR). */ rtx assign_stack_temp (mode, size, keep) enum machine_mode mode; ! HOST_WIDE_INT size; int keep; { *************** *** 849,853 **** { int alignment = BIGGEST_ALIGNMENT / BITS_PER_UNIT; ! int rounded_size = CEIL_ROUND (size, alignment); if (best_p->size - rounded_size >= alignment) --- 859,863 ---- { int alignment = BIGGEST_ALIGNMENT / BITS_PER_UNIT; ! HOST_WIDE_INT rounded_size = CEIL_ROUND (size, alignment); if (best_p->size - rounded_size >= alignment) *************** *** 880,888 **** if (p == 0) { ! int frame_offset_old = frame_offset; p = (struct temp_slot *) oballoc (sizeof (struct temp_slot)); /* If the temp slot mode doesn't indicate the alignment, use the largest possible, so no one will be disappointed. */ p->slot = assign_stack_local (mode, size, mode == BLKmode ? -1 : 0); /* The following slot size computation is necessary because we don't know the actual size of the temporary slot until assign_stack_local --- 890,901 ---- if (p == 0) { ! HOST_WIDE_INT frame_offset_old = frame_offset; ! p = (struct temp_slot *) oballoc (sizeof (struct temp_slot)); + /* If the temp slot mode doesn't indicate the alignment, use the largest possible, so no one will be disappointed. */ p->slot = assign_stack_local (mode, size, mode == BLKmode ? -1 : 0); + /* The following slot size computation is necessary because we don't know the actual size of the temporary slot until assign_stack_local *************** *** 897,900 **** --- 910,914 ---- p->size = size; #endif + /* Now define the fields used by combine_temp_slots. */ #ifdef FRAME_GROWS_DOWNWARD *************** *** 919,922 **** --- 933,941 ---- p->keep = 0; } + else if (keep == 3) + { + p->level = var_temp_slot_level; + p->keep = 0; + } else { *************** *** 951,955 **** if (mode == BLKmode || memory_required) { ! int size = int_size_in_bytes (type); rtx tmp; --- 970,974 ---- if (mode == BLKmode || memory_required) { ! HOST_WIDE_INT size = int_size_in_bytes (type); rtx tmp; *************** *** 987,996 **** struct temp_slot *p, *q; struct temp_slot *prev_p, *prev_q; ! /* Determine where to free back to after this function. */ ! rtx free_pointer = rtx_alloc (CONST_INT); for (p = temp_slots, prev_p = 0; p; p = prev_p ? prev_p->next : temp_slots) { int delete_p = 0; if (! p->in_use && GET_MODE (p->slot) == BLKmode) for (q = p->next, prev_q = p; q; q = prev_q->next) --- 1006,1022 ---- struct temp_slot *p, *q; struct temp_slot *prev_p, *prev_q; ! int num_slots; ! ! /* If there are a lot of temp slots, don't do anything unless ! high levels of optimizaton. */ ! if (! flag_expensive_optimizations) ! for (p = temp_slots, num_slots = 0; p; p = p->next, num_slots++) ! if (num_slots > 100 || (num_slots > 10 && optimize == 0)) ! return; for (p = temp_slots, prev_p = 0; p; p = prev_p ? prev_p->next : temp_slots) { int delete_p = 0; + if (! p->in_use && GET_MODE (p->slot) == BLKmode) for (q = p->next, prev_q = p; q; q = prev_q->next) *************** *** 1032,1038 **** prev_p = p; } - - /* Free all the RTL made by plus_constant. */ - rtx_free (free_pointer); } --- 1058,1061 ---- *************** *** 1050,1053 **** --- 1073,1077 ---- if (! p->in_use) continue; + else if (XEXP (p->slot, 0) == x || p->address == x *************** *** 1069,1073 **** /* Indicate that NEW is an alternate way of referring to the temp slot ! that previous was known by OLD. */ void --- 1093,1097 ---- /* Indicate that NEW is an alternate way of referring to the temp slot ! that previously was known by OLD. */ void *************** *** 1272,1275 **** --- 1296,1310 ---- } + /* Likewise, but save the new level as the place to allocate variables + for blocks. */ + + void + push_temp_slots_for_block () + { + push_temp_slots (); + + var_temp_slot_level = temp_slot_level; + } + /* Pop a temporary nesting level. All slots in use in the current level are freed. */ *************** *** 1297,1300 **** --- 1332,1336 ---- temp_slots = 0; temp_slot_level = 0; + var_temp_slot_level = 0; target_temp_slot_level = 0; } *************** *** 1353,1356 **** --- 1389,1393 ---- can_use_addressof = (function == 0 + && optimize > 0 /* FIXME make it work for promoted modes too */ && decl_mode == promoted_mode *************** *** 1378,1382 **** put_reg_into_stack (function, reg, TREE_TYPE (decl), promoted_mode, decl_mode, ! TREE_SIDE_EFFECTS (decl), 0); } else if (GET_CODE (reg) == CONCAT) --- 1415,1421 ---- put_reg_into_stack (function, reg, TREE_TYPE (decl), promoted_mode, decl_mode, ! TREE_SIDE_EFFECTS (decl), 0, ! TREE_USED (decl) ! || DECL_INITIAL (decl) != 0); } else if (GET_CODE (reg) == CONCAT) *************** *** 1389,1400 **** /* Since part 0 should have a lower address, do it second. */ put_reg_into_stack (function, XEXP (reg, 1), part_type, part_mode, ! part_mode, TREE_SIDE_EFFECTS (decl), 0); put_reg_into_stack (function, XEXP (reg, 0), part_type, part_mode, ! part_mode, TREE_SIDE_EFFECTS (decl), 0); #else put_reg_into_stack (function, XEXP (reg, 0), part_type, part_mode, ! part_mode, TREE_SIDE_EFFECTS (decl), 0); put_reg_into_stack (function, XEXP (reg, 1), part_type, part_mode, ! part_mode, TREE_SIDE_EFFECTS (decl), 0); #endif --- 1428,1443 ---- /* Since part 0 should have a lower address, do it second. */ put_reg_into_stack (function, XEXP (reg, 1), part_type, part_mode, ! part_mode, TREE_SIDE_EFFECTS (decl), 0, ! TREE_USED (decl) || DECL_INITIAL (decl) != 0); put_reg_into_stack (function, XEXP (reg, 0), part_type, part_mode, ! part_mode, TREE_SIDE_EFFECTS (decl), 0, ! TREE_USED (decl) || DECL_INITIAL (decl) != 0); #else put_reg_into_stack (function, XEXP (reg, 0), part_type, part_mode, ! part_mode, TREE_SIDE_EFFECTS (decl), 0, ! TREE_USED (decl) || DECL_INITIAL (decl) != 0); put_reg_into_stack (function, XEXP (reg, 1), part_type, part_mode, ! part_mode, TREE_SIDE_EFFECTS (decl), 0, ! TREE_USED (decl) || DECL_INITIAL (decl) != 0); #endif *************** *** 1426,1434 **** DECL_MODE is the machine mode of the user-level data type. PROMOTED_MODE is the machine mode of the register. ! VOLATILE_P is nonzero if this is for a "volatile" decl. */ static void put_reg_into_stack (function, reg, type, promoted_mode, decl_mode, volatile_p, ! original_regno) struct function *function; rtx reg; --- 1469,1478 ---- DECL_MODE is the machine mode of the user-level data type. PROMOTED_MODE is the machine mode of the register. ! VOLATILE_P is nonzero if this is for a "volatile" decl. ! USED_P is nonzero if this reg might have already been used in an insn. */ static void put_reg_into_stack (function, reg, type, promoted_mode, decl_mode, volatile_p, ! original_regno, used_p) struct function *function; rtx reg; *************** *** 1437,1440 **** --- 1481,1485 ---- int volatile_p; int original_regno; + int used_p; { rtx new = 0; *************** *** 1472,1476 **** /* Now make sure that all refs to the variable, previously made when it was a register, are fixed up to be valid again. */ ! if (function) { struct var_refs_queue *temp; --- 1517,1522 ---- /* Now make sure that all refs to the variable, previously made when it was a register, are fixed up to be valid again. */ ! ! if (used_p && function != 0) { struct var_refs_queue *temp; *************** *** 1491,1495 **** pop_obstacks (); } ! else /* Variable is local; fix it up now. */ fixup_var_refs (reg, promoted_mode, TREE_UNSIGNED (type)); --- 1537,1541 ---- pop_obstacks (); } ! else if (used_p) /* Variable is local; fix it up now. */ fixup_var_refs (reg, promoted_mode, TREE_UNSIGNED (type)); *************** *** 1880,1885 **** enum machine_mode wanted_mode = VOIDmode; enum machine_mode is_mode = GET_MODE (tem); ! int width = INTVAL (XEXP (x, 1)); ! int pos = INTVAL (XEXP (x, 2)); #ifdef HAVE_extzv --- 1926,1931 ---- enum machine_mode wanted_mode = VOIDmode; enum machine_mode is_mode = GET_MODE (tem); ! HOST_WIDE_INT width = INTVAL (XEXP (x, 1)); ! HOST_WIDE_INT pos = INTVAL (XEXP (x, 2)); #ifdef HAVE_extzv *************** *** 1895,1899 **** && GET_MODE_SIZE (wanted_mode) < GET_MODE_SIZE (is_mode)) { ! int offset = pos / BITS_PER_UNIT; rtx old_pos = XEXP (x, 2); rtx newmem; --- 1941,1945 ---- && GET_MODE_SIZE (wanted_mode) < GET_MODE_SIZE (is_mode)) { ! HOST_WIDE_INT offset = pos / BITS_PER_UNIT; rtx old_pos = XEXP (x, 2); rtx newmem; *************** *** 2079,2089 **** = insn_operand_mode[(int) CODE_FOR_insv][0]; enum machine_mode is_mode = GET_MODE (tem); ! int width = INTVAL (XEXP (outerdest, 1)); ! int pos = INTVAL (XEXP (outerdest, 2)); /* If we have a narrower mode, we can do something. */ if (GET_MODE_SIZE (wanted_mode) < GET_MODE_SIZE (is_mode)) { ! int offset = pos / BITS_PER_UNIT; rtx old_pos = XEXP (outerdest, 2); rtx newmem; --- 2125,2135 ---- = insn_operand_mode[(int) CODE_FOR_insv][0]; enum machine_mode is_mode = GET_MODE (tem); ! HOST_WIDE_INT width = INTVAL (XEXP (outerdest, 1)); ! HOST_WIDE_INT pos = INTVAL (XEXP (outerdest, 2)); /* If we have a narrower mode, we can do something. */ if (GET_MODE_SIZE (wanted_mode) < GET_MODE_SIZE (is_mode)) { ! HOST_WIDE_INT offset = pos / BITS_PER_UNIT; rtx old_pos = XEXP (outerdest, 2); rtx newmem; *************** *** 2490,2494 **** and then for which byte of the word is wanted. */ ! register int offset = INTVAL (XEXP (bitfield, 2)); rtx insns; --- 2536,2540 ---- and then for which byte of the word is wanted. */ ! HOST_WIDE_INT offset = INTVAL (XEXP (bitfield, 2)); rtx insns; *************** *** 2657,2661 **** MEM_IN_STRUCT_P (reg) = AGGREGATE_TYPE_P (type); ! fixup_var_refs (reg, GET_MODE (reg), TREE_UNSIGNED (type)); return reg; } --- 2703,2709 ---- MEM_IN_STRUCT_P (reg) = AGGREGATE_TYPE_P (type); ! if (TREE_USED (decl) || DECL_INITIAL (decl) != 0) ! fixup_var_refs (reg, GET_MODE (reg), TREE_UNSIGNED (type)); ! return reg; } *************** *** 2689,2693 **** put_reg_into_stack (0, reg, TREE_TYPE (decl), GET_MODE (reg), DECL_MODE (decl), TREE_SIDE_EFFECTS (decl), ! ADDRESSOF_REGNO (r)); } --- 2737,2742 ---- put_reg_into_stack (0, reg, TREE_TYPE (decl), GET_MODE (reg), DECL_MODE (decl), TREE_SIDE_EFFECTS (decl), ! ADDRESSOF_REGNO (r), ! TREE_USED (decl) || DECL_INITIAL (decl) != 0); } *************** *** 2740,2746 **** { rtx sub = XEXP (XEXP (x, 0), 0); if (GET_CODE (sub) == MEM) sub = gen_rtx (MEM, GET_MODE (x), copy_rtx (XEXP (sub, 0))); ! if (GET_CODE (sub) == REG && GET_MODE (x) != GET_MODE (sub)) { if (! BYTES_BIG_ENDIAN && ! WORDS_BIG_ENDIAN) --- 2789,2802 ---- { rtx sub = XEXP (XEXP (x, 0), 0); + if (GET_CODE (sub) == MEM) sub = gen_rtx (MEM, GET_MODE (x), copy_rtx (XEXP (sub, 0))); ! ! if (GET_CODE (sub) == REG && MEM_VOLATILE_P (x)) ! { ! put_addressof_into_stack (XEXP (x, 0)); ! return; ! } ! else if (GET_CODE (sub) == REG && GET_MODE (x) != GET_MODE (sub)) { if (! BYTES_BIG_ENDIAN && ! WORDS_BIG_ENDIAN) *************** *** 2866,2870 **** for (decl = DECL_ARGUMENTS (fndecl); decl; decl = TREE_CHAIN (decl)) { ! int size = int_size_in_bytes (TREE_TYPE (decl)); instantiate_decl (DECL_RTL (decl), size, valid_only); --- 2922,2927 ---- for (decl = DECL_ARGUMENTS (fndecl); decl; decl = TREE_CHAIN (decl)) { ! HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (decl)); ! instantiate_decl (DECL_RTL (decl), size, valid_only); *************** *** 2996,3000 **** RTX_CODE code; rtx new = 0; ! int offset; rtx temp; rtx seq; --- 3053,3057 ---- RTX_CODE code; rtx new = 0; ! HOST_WIDE_INT offset; rtx temp; rtx seq; *************** *** 3664,3671 **** /* Set LAST_NAMED if this is last named arg before some ! anonymous args. We treat it as if it were anonymous too. */ int last_named = ((TREE_CHAIN (parm) == 0 || DECL_NAME (TREE_CHAIN (parm)) == 0) && (stdarg || current_function_varargs)); if (TREE_TYPE (parm) == error_mark_node --- 3721,3736 ---- /* Set LAST_NAMED if this is last named arg before some ! anonymous args. */ int last_named = ((TREE_CHAIN (parm) == 0 || DECL_NAME (TREE_CHAIN (parm)) == 0) && (stdarg || current_function_varargs)); + /* Set NAMED_ARG if this arg should be treated as a named arg. For + most machines, if this is a varargs/stdarg function, then we treat + the last named arg as if it were anonymous too. */ + #ifdef STRICT_ARGUMENT_NAMING + int named_arg = 1; + #else + int named_arg = ! last_named; + #endif if (TREE_TYPE (parm) == error_mark_node *************** *** 3716,3720 **** #ifdef FUNCTION_ARG_PASS_BY_REFERENCE || FUNCTION_ARG_PASS_BY_REFERENCE (args_so_far, passed_mode, ! passed_type, ! last_named) #endif ) --- 3781,3785 ---- #ifdef FUNCTION_ARG_PASS_BY_REFERENCE || FUNCTION_ARG_PASS_BY_REFERENCE (args_so_far, passed_mode, ! passed_type, named_arg) #endif ) *************** *** 3736,3743 **** #ifdef FUNCTION_INCOMING_ARG entry_parm = FUNCTION_INCOMING_ARG (args_so_far, promoted_mode, ! passed_type, ! last_named); #else entry_parm = FUNCTION_ARG (args_so_far, promoted_mode, ! passed_type, ! last_named); #endif --- 3801,3808 ---- #ifdef FUNCTION_INCOMING_ARG entry_parm = FUNCTION_INCOMING_ARG (args_so_far, promoted_mode, ! passed_type, named_arg); #else entry_parm = FUNCTION_ARG (args_so_far, promoted_mode, ! passed_type, named_arg); #endif *************** *** 3785,3794 **** FUNCTION_INCOMING_ARG (args_so_far, promoted_mode, passed_type, ! (! last_named || varargs_setup)) != 0, #else FUNCTION_ARG (args_so_far, promoted_mode, passed_type, ! ! last_named || varargs_setup) != 0, #endif #endif --- 3850,3859 ---- FUNCTION_INCOMING_ARG (args_so_far, promoted_mode, passed_type, ! (named_arg || varargs_setup)) != 0, #else FUNCTION_ARG (args_so_far, promoted_mode, passed_type, ! named_arg || varargs_setup) != 0, #endif #endif *************** *** 3830,3834 **** { int nregs = FUNCTION_ARG_PARTIAL_NREGS (args_so_far, promoted_mode, ! passed_type, ! last_named); if (nregs > 0) --- 3895,3899 ---- { int nregs = FUNCTION_ARG_PARTIAL_NREGS (args_so_far, promoted_mode, ! passed_type, named_arg); if (nregs > 0) *************** *** 3895,3899 **** FUNCTION_ARG_ADVANCE (args_so_far, promoted_mode, ! passed_type, ! last_named); /* If this is our second time through, we are done with this parm. */ --- 3960,3964 ---- FUNCTION_ARG_ADVANCE (args_so_far, promoted_mode, ! passed_type, named_arg); /* If this is our second time through, we are done with this parm. */ *************** *** 4149,4153 **** TYPE_MODE (DECL_ARG_TYPE (parm)), DECL_ARG_TYPE (parm), ! ! last_named) && ! TREE_ADDRESSABLE (DECL_ARG_TYPE (parm))) { --- 4214,4218 ---- TYPE_MODE (DECL_ARG_TYPE (parm)), DECL_ARG_TYPE (parm), ! named_arg) && ! TREE_ADDRESSABLE (DECL_ARG_TYPE (parm))) { *************** *** 4285,4289 **** /* For pointer data type, suggest pointer register. */ ! if (TREE_CODE (TREE_TYPE (parm)) == POINTER_TYPE) mark_reg_pointer (parmreg, (TYPE_ALIGN (TREE_TYPE (TREE_TYPE (parm))) --- 4350,4354 ---- /* For pointer data type, suggest pointer register. */ ! if (POINTER_TYPE_P (TREE_TYPE (parm))) mark_reg_pointer (parmreg, (TYPE_ALIGN (TREE_TYPE (TREE_TYPE (parm))) *************** *** 4334,4340 **** validize_mem (entry_parm)); } ! if (flag_check_memory_usage ! && entry_parm != stack_parm ! && promoted_mode != nominal_mode) { push_to_sequence (conversion_insns); --- 4399,4403 ---- validize_mem (entry_parm)); } ! if (flag_check_memory_usage) { push_to_sequence (conversion_insns); *************** *** 4819,4823 **** { rtx basereg; ! int displacement; tree context = decl_function_context (var); struct function *fp; --- 4882,4886 ---- { rtx basereg; ! HOST_WIDE_INT displacement; tree context = decl_function_context (var); struct function *fp; diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/function.h gcc-2.8.1/function.h *** gcc-2.8.0/function.h Sun Oct 19 09:27:29 1997 --- gcc-2.8.1/function.h Fri Feb 6 20:03:42 1998 *************** *** 1,4 **** /* Structure for saving state for a nested function. ! Copyright (C) 1989, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* Structure for saving state for a nested function. ! Copyright (C) 1989, 92-97, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 109,112 **** --- 109,114 ---- struct temp_slot *temp_slots; int temp_slot_level; + int target_temp_slot_level; + int var_temp_slot_level; /* This slot is initialized as 0 and is added to during the nested function. */ diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/gansidecl.h gcc-2.8.1/gansidecl.h *** gcc-2.8.0/gansidecl.h Wed Dec 3 08:11:07 1997 --- gcc-2.8.1/gansidecl.h Sat Feb 14 11:31:43 1998 *************** *** 1,4 **** /* ANSI and traditional C compatibility macros. ! Copyright (C) 1996, 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* ANSI and traditional C compatibility macros. ! Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 78,81 **** --- 78,86 ---- #endif /* ! __STDC__ */ + /* We don't have autoconf for libgcc2.c since it's a target, so don't + define these functions, which aren't used there anyway. */ + + #ifndef IN_LIBGCC2 + #ifndef HAVE_BCOPY #define bcopy(src,dst,len) memcpy ((dst),(src),(len)) *************** *** 97,100 **** --- 102,107 ---- #define index strchr #endif + + #endif /* IN_LIBGCC2 */ #endif /* ANSIDECL_H */ diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/gbl-ctors.h gcc-2.8.1/gbl-ctors.h *** gcc-2.8.0/gbl-ctors.h Wed Oct 9 07:25:34 1996 --- gcc-2.8.1/gbl-ctors.h Thu Feb 12 09:34:32 1998 *************** *** 3,7 **** will get included either by libgcc2.c (for systems that don't support a .init section) or by crtstuff.c (for those that do). ! Copyright (C) 1991, 1995, 1996 Free Software Foundation, Inc. Contributed by Ron Guilmette (rfg@segfault.us.com) --- 3,7 ---- will get included either by libgcc2.c (for systems that don't support a .init section) or by crtstuff.c (for those that do). ! Copyright (C) 1991, 1995, 1996, 1998 Free Software Foundation, Inc. Contributed by Ron Guilmette (rfg@segfault.us.com) *************** *** 40,45 **** #if defined (WINNT) || defined (NEED_ATEXIT) extern int atexit (void (*) (void)); - #else - extern void atexit (void (*) (void)); #endif #define ON_EXIT(FUNC,ARG) atexit ((FUNC)) --- 40,43 ---- diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/gcc.1 gcc-2.8.1/gcc.1 *** gcc-2.8.0/gcc.1 Wed Dec 3 08:11:08 1997 --- gcc-2.8.1/gcc.1 Tue Feb 17 13:44:00 1998 *************** *** 21,25 **** .if t .sp 0.4 .. ! .Id $Id: gcc.1,v 1.4 1993/10/13 23:19:12 pesch Exp $ .TH GCC 1 "\*(Dt" "GNU Tools" "GNU Tools" .SH NAME --- 21,25 ---- .if t .sp 0.4 .. ! .Id $Id: gcc.1,v 1.1 1997/12/03 13:11:08 kenner Exp $ .TH GCC 1 "\*(Dt" "GNU Tools" "GNU Tools" .SH NAME diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/gcc.c gcc-2.8.1/gcc.c *** gcc-2.8.0/gcc.c Wed Dec 3 08:11:10 1997 --- gcc-2.8.1/gcc.c Sat Feb 28 15:58:17 1998 *************** *** 1,4 **** /* Compiler driver program that can handle many languages. ! Copyright (C) 1987, 89, 92-96, 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* Compiler driver program that can handle many languages. ! Copyright (C) 1987, 89, 92-97, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 267,270 **** --- 267,271 ---- static void perror_with_name PROTO((char *)); static void pfatal_pexecute PROTO((char *, char *)); + static void snapshot_warning PROTO((void)); #ifdef HAVE_VPRINTF static void fatal PVPROTO((char *, ...)); *************** *** 2533,2537 **** else if (! strcmp (argv[i], "-dumpversion")) { ! printf ("%s\n", version_string); exit (0); } --- 2534,2538 ---- else if (! strcmp (argv[i], "-dumpversion")) { ! printf ("%s\n", spec_version); exit (0); } *************** *** 2750,2753 **** --- 2751,2784 ---- compiler_version = spec_version; warn_std_ptr = &warn_std; + + /* Validate the version number. Use the same checks + done when inserting it into a spec. + + The format of the version string is + ([^0-9]*-)?[0-9]+[.][0-9]+([.][0-9]+)?([- ].*)? */ + { + char *v = compiler_version; + + /* Ignore leading non-digits. i.e. "foo-" in "foo-2.7.2". */ + while (! isdigit (*v)) + v++; + + if (v > compiler_version && v[-1] != '-') + fatal ("invalid version number format"); + + /* Set V after the first period. */ + while (isdigit (*v)) + v++; + + if (*v != '.') + fatal ("invalid version number format"); + + v++; + while (isdigit (*v)) + v++; + + if (*v != 0 && *v != ' ' && *v != '.' && *v != '-') + fatal ("invalid version number format"); + } break; *************** *** 2905,2909 **** if (argv[i][j] == ',') { ! infiles[n_infiles].language = 0; infiles[n_infiles++].name = save_string (argv[i] + prev, j - prev); --- 2936,2940 ---- if (argv[i][j] == ',') { ! infiles[n_infiles].language = "*"; infiles[n_infiles++].name = save_string (argv[i] + prev, j - prev); *************** *** 2911,2925 **** } /* Record the part after the last comma. */ ! infiles[n_infiles].language = 0; infiles[n_infiles++].name = argv[i] + prev; } else if (strcmp (argv[i], "-Xlinker") == 0) { ! infiles[n_infiles].language = 0; infiles[n_infiles++].name = argv[++i]; } else if (strncmp (argv[i], "-l", 2) == 0) { ! infiles[n_infiles].language = 0; infiles[n_infiles++].name = argv[i]; } --- 2942,2956 ---- } /* Record the part after the last comma. */ ! infiles[n_infiles].language = "*"; infiles[n_infiles++].name = argv[i] + prev; } else if (strcmp (argv[i], "-Xlinker") == 0) { ! infiles[n_infiles].language = "*"; infiles[n_infiles++].name = argv[++i]; } else if (strncmp (argv[i], "-l", 2) == 0) { ! infiles[n_infiles].language = "*"; infiles[n_infiles++].name = argv[i]; } *************** *** 4354,4357 **** --- 4385,4392 ---- #endif + /* If this is a test release of GCC, issue a warning. */ + if (version_string[0] == 't' && version_string[1] == 'e') + snapshot_warning (); + argbuf_length = 10; argbuf = (char **) xmalloc (argbuf_length * sizeof (char *)); *************** *** 4487,4491 **** standard_startfile_prefix on that as well. */ if (*standard_startfile_prefix == '/' ! || *standard_startfile_prefix == DIR_SEPARATOR) add_prefix (&startfile_prefixes, standard_startfile_prefix, "BINUTILS", 0, 0, NULL_PTR); --- 4522,4534 ---- standard_startfile_prefix on that as well. */ if (*standard_startfile_prefix == '/' ! || *standard_startfile_prefix == DIR_SEPARATOR ! || *standard_startfile_prefix == '$' ! #ifdef __MSDOS__ ! /* Check for disk name on MS-DOS-based systems. */ ! || (standard_startfile_prefix[1] == ':' ! && (standard_startfile_prefix[2] == DIR_SEPARATOR ! || standard_startfile_prefix[2] == '/')) ! #endif ! ) add_prefix (&startfile_prefixes, standard_startfile_prefix, "BINUTILS", 0, 0, NULL_PTR); *************** *** 4783,4787 **** /* Find the proper compilation spec for the file name NAME, whose length is LENGTH. LANGUAGE is the specified language, ! or 0 if none specified. */ static struct compiler * --- 4826,4830 ---- /* Find the proper compilation spec for the file name NAME, whose length is LENGTH. LANGUAGE is the specified language, ! or 0 if this file is to be passed to the linker. */ static struct compiler * *************** *** 4793,4809 **** struct compiler *cp; ! /* Look for the language, if one is spec'd. */ if (language != 0) { for (cp = compilers + n_compilers - 1; cp >= compilers; cp--) ! { ! if (language != 0) ! { ! if (cp->suffix[0] == '@' ! && !strcmp (cp->suffix + 1, language)) ! return cp; ! } ! } error ("language %s not recognized", language); } --- 4836,4852 ---- struct compiler *cp; ! /* If this was specified by the user to be a linker input, indicate that. */ ! if (language != 0 && language[0] == '*') ! return 0; ! ! /* Otherwise, look for the language, if one is spec'd. */ if (language != 0) { for (cp = compilers + n_compilers - 1; cp >= compilers; cp--) ! if (cp->suffix[0] == '@' && !strcmp (cp->suffix + 1, language)) ! return cp; ! error ("language %s not recognized", language); + return 0; } *************** *** 4813,4833 **** if (/* The suffix `-' matches only the file name `-'. */ (!strcmp (cp->suffix, "-") && !strcmp (name, "-")) ! || ! (strlen (cp->suffix) < length ! /* See if the suffix matches the end of NAME. */ #ifdef OS2 ! && (!strcmp (cp->suffix, ! name + length - strlen (cp->suffix)) ! || !strpbrk (cp->suffix, "ABCDEFGHIJKLMNOPQRSTUVWXYZ") ! && !strcasecmp (cp->suffix, ! name + length - strlen (cp->suffix))))) #else ! && !strcmp (cp->suffix, ! name + length - strlen (cp->suffix)))) #endif { if (cp->spec[0][0] == '@') { struct compiler *new; /* An alias entry maps a suffix to a language. Search for the language; pass 0 for NAME and LENGTH --- 4856,4877 ---- if (/* The suffix `-' matches only the file name `-'. */ (!strcmp (cp->suffix, "-") && !strcmp (name, "-")) ! || (strlen (cp->suffix) < length ! /* See if the suffix matches the end of NAME. */ #ifdef OS2 ! && ((!strcmp (cp->suffix, ! name + length - strlen (cp->suffix)) ! || !strpbrk (cp->suffix, "ABCDEFGHIJKLMNOPQRSTUVWXYZ")) ! && !strcasecmp (cp->suffix, ! name + length - strlen (cp->suffix))) #else ! && !strcmp (cp->suffix, ! name + length - strlen (cp->suffix)) #endif + )) { if (cp->spec[0][0] == '@') { struct compiler *new; + /* An alias entry maps a suffix to a language. Search for the language; pass 0 for NAME and LENGTH *************** *** 4841,4844 **** --- 4885,4889 ---- return new; } + /* A non-alias entry: return it. */ return cp; *************** *** 4955,4958 **** --- 5000,5005 ---- char *errmsg_arg; { + int save_errno = errno; + if (errmsg_arg) { *************** *** 4963,4967 **** } ! fatal ("%s: %s", errmsg_fmt, my_strerror (errno)); } --- 5010,5014 ---- } ! fatal ("%s: %s", errmsg_fmt, my_strerror (save_errno)); } *************** *** 5493,5496 **** --- 5540,5601 ---- ++p; + } + } + + /* If a snapshot, warn the user that this version of gcc is for testing and + developing only. If we can find a home directory, we can restrict the + warning to once per day. Otherwise always issue it. */ + + #define TIMESTAMP_FILE ".gcc-test-time" + #define ONE_DAY (24*60*60) + + static void + snapshot_warning () + { + char *home; + int print_p = 1; + + /* Every function here but `time' is called elsewhere in this file, + but we only can be sure we have it for Unix and the Windows systems, + so conditionalize this on those. + + ??? This should use autoconf at some point. */ + + #if defined(unix) || defined(__CYGWIN32__) || defined(_MINGW32__) + + home = getenv ("HOME"); + if (home != 0) + { + char *file_name + = (char *) alloca (strlen (home) + 1 + sizeof (TIMESTAMP_FILE)); + struct stat statbuf; + time_t now = time (NULL); + int s; + + sprintf (file_name, "%s/%s", home, TIMESTAMP_FILE); + s = stat (file_name, &statbuf); + if (s == 0 + && (statbuf.st_mtime + ONE_DAY > now)) + print_p = 0; + else + { + FILE *f = fopen (file_name, "w"); + + if (f != 0) + { + fputc ('\n', f); + fclose (f); + } + } + } + #endif + + if (print_p) + { + fprintf (stderr, "*** This is a development snapshot of GCC.\n"); + fprintf (stderr, + "*** It is not a reliable release, and the GCC developers\n"); + fprintf (stderr, + "*** warn you not to use it for anything except to test it.\n"); } } diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/gcc.hlp gcc-2.8.1/gcc.hlp *** gcc-2.8.0/gcc.hlp Thu Dec 12 23:27:49 1991 --- gcc-2.8.1/gcc.hlp Tue Feb 17 13:44:17 1998 *************** *** 87,93 **** linked to. - If you need to link to libg++, it is easiest to use the command - procedure supplied with libg++ to link your program. - 2 /CASE_HACK --- 87,90 ---- diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/gcc.texi gcc-2.8.1/gcc.texi *** gcc-2.8.0/gcc.texi Wed Jan 7 21:43:08 1998 --- gcc-2.8.1/gcc.texi Sat Feb 28 15:58:17 1998 *************** *** 145,158 **** @center Richard M. Stallman @sp 3 ! @center Last updated 7 January 1998 @sp 1 ! @c The version number appears three times more in this file. ! @center for version 2.8.0 @page @vskip 0pt plus 1filll Copyright @copyright{} 1988, 89, 92, 93, 94, 95, 96 Free Software Foundation, Inc. @sp 2 ! For GCC Version 2.8.0@* @sp 1 Published by the Free Software Foundation @* --- 145,158 ---- @center Richard M. Stallman @sp 3 ! @center Last updated 28 February 1998 @sp 1 ! @c The version number appears five times more in this file. ! @center for version 2.8.1 @page @vskip 0pt plus 1filll Copyright @copyright{} 1988, 89, 92, 93, 94, 95, 96 Free Software Foundation, Inc. @sp 2 ! For GCC Version 2.8.1@* @sp 1 Published by the Free Software Foundation @* *************** *** 195,199 **** This manual documents how to run, install and port the GNU compiler, as well as its new features and incompatibilities, and how to ! report bugs. It corresponds to GNU CC version 2.8.0. @end ifset @end ifset --- 195,199 ---- This manual documents how to run, install and port the GNU compiler, as well as its new features and incompatibilities, and how to ! report bugs. It corresponds to GNU CC version 2.8.1. @end ifset @end ifset *************** *** 202,211 **** This manual documents how to run and install the GNU compiler, as well as its new features and incompatibilities, and how to report ! bugs. It corresponds to GNU CC version 2.8.0. @end ifclear @ifclear USING This manual documents how to port the GNU compiler, as well as its new features and incompatibilities, and how to report ! bugs. It corresponds to GNU CC version 2.7.1. @end ifclear --- 202,211 ---- This manual documents how to run and install the GNU compiler, as well as its new features and incompatibilities, and how to report ! bugs. It corresponds to GNU CC version 2.8.1. @end ifclear @ifclear USING This manual documents how to port the GNU compiler, as well as its new features and incompatibilities, and how to report ! bugs. It corresponds to GNU CC version 2.8.1. @end ifclear *************** *** 1123,1127 **** @smallexample ! -L/usr/local/lib/gcc-lib/we32k-att-sysv/2.7.1 -lgcc -lc_s @end smallexample --- 1123,1127 ---- @smallexample ! -L/usr/local/lib/gcc-lib/we32k-att-sysv/2.8.1 -lgcc -lc_s @end smallexample diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/genattrtab.c gcc-2.8.1/genattrtab.c *** gcc-2.8.0/genattrtab.c Tue Dec 23 05:18:03 1997 --- gcc-2.8.1/genattrtab.c Fri Feb 6 15:18:02 1998 *************** *** 1,4 **** /* Generate code from machine description to compute values of attributes. ! Copyright (C) 1991, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu) --- 1,4 ---- /* Generate code from machine description to compute values of attributes. ! Copyright (C) 1991, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu) *************** *** 349,352 **** --- 349,357 ---- static char *alternative_name; + /* Indicate that REG_DEAD notes are valid if dead_or_set_p is ever + called. */ + + int reload_completed = 0; + /* Simplify an expression. Only call the routine if there is something to simplify. */ *************** *** 368,372 **** rtx frame_pointer_rtx, hard_frame_pointer_rtx, stack_pointer_rtx; ! rtx arg_pointer_rtx; static rtx attr_rtx PVPROTO((enum rtx_code, ...)); --- 373,377 ---- rtx frame_pointer_rtx, hard_frame_pointer_rtx, stack_pointer_rtx; ! rtx arg_pointer_rtx, pic_offset_table_rtx; static rtx attr_rtx PVPROTO((enum rtx_code, ...)); diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/install.texi gcc-2.8.1/install.texi *** gcc-2.8.0/install.texi Thu Jan 8 05:02:48 1998 --- gcc-2.8.1/install.texi Sat Feb 21 06:56:30 1998 *************** *** 65,70 **** In those cases, specify the build machine's @dfn{configuration name} ! with the @samp{--build} option; the host and target will default to be ! the same as the build machine. (If you are building a cross-compiler, see @ref{Cross-Compiler}.) --- 65,70 ---- In those cases, specify the build machine's @dfn{configuration name} ! with the @samp{--host} option; the host and target will default to be ! the same as the host machine. (If you are building a cross-compiler, see @ref{Cross-Compiler}.) *************** *** 495,503 **** @file{/usr/local/lib/gcc-lib/@var{target}/@var{version}}, which is where the compiler driver program looks for them. Here @var{target} is the ! target machine type specified when you ran @file{configure}, and ! @var{version} is the version number of GNU CC. This naming scheme ! permits various versions and/or cross-compilers to coexist. ! It also copies the executables for compilers for other languages ! (e.g., @file{cc1plus} for C++) to the same directory. This also copies the driver program @file{xgcc} into --- 495,503 ---- @file{/usr/local/lib/gcc-lib/@var{target}/@var{version}}, which is where the compiler driver program looks for them. Here @var{target} is the ! canonicalized form of target machine type specified when you ran ! @file{configure}, and @var{version} is the version number of GNU CC. ! This naming scheme permits various versions and/or cross-compilers to ! coexist. It also copies the executables for compilers for other ! languages (e.g., @file{cc1plus} for C++) to the same directory. This also copies the driver program @file{xgcc} into *************** *** 530,534 **** provided by the C++ runtime library. ! Here's one way to build and install a C++ runtime library for GNU CC: @itemize @bullet --- 530,540 ---- provided by the C++ runtime library. ! The standard C++ runtime library for GNU CC is called @samp{libstdc++}. ! An obsolescent library @samp{libg++} may also be available, but it's ! necessary only for older software that hasn't been converted yet; if ! you don't know whether you need @samp{libg++} then you probably don't ! need it. ! ! Here's one way to build and install @samp{libstdc++} for GNU CC: @itemize @bullet *************** *** 844,850 **** @item decstation-* ! DECstations can support three different personalities: Ultrix, ! DEC OSF/1, and OSF/rose. To configure GCC for these platforms ! use the following configurations: @table @samp --- 850,857 ---- @item decstation-* ! MIPS-based DECstations can support three different personalities: ! Ultrix, DEC OSF/1, and OSF/rose. (Alpha-based DECstation products have ! a configuration name beginning with @samp{alpha-dec}.) To configure GCC ! for these platforms use the following configurations: @table @samp *************** *** 961,975 **** 5.0.4, Internet FastStart 1.0, and Internet FastStart 1.1. ! GNU CC can generate ELF binaries (if you specify @samp{-melf}) or COFF ! binaries (the default). If you are going to build your compiler in ELF ! mode (once you have bootstrapped the first stage compiler) you ! @strong{must} specify @samp{-melf} as part of @code{CC}, ! @emph{not} @code{CFLAGS}, for example as ! @samp{CC="stage1/xgcc -melf -Bstage1/" }. If you do not do this, the ! bootstrap will generate incorrect versions of @file{libgcc.a}. ! ! You must have TLS597 (from ftp.sco.com/TLS) installed for ELF ! binaries to work correctly. Note that Open Server 5.0.2 @emph{does} ! need TLS597 installed. @emph{NOTE:} You must follow the instructions about invoking --- 968,976 ---- 5.0.4, Internet FastStart 1.0, and Internet FastStart 1.1. ! GNU CC can generate either ELF or COFF binaries. ELF is the default. ! To get COFF output, you must specify @samp{-mcoff} on the command line. ! ! For 5.0.0 and 5.0.2, you must install TLS597 from ftp.sco.com/TLS. ! 5.0.4 and later do not require this patch. @emph{NOTE:} You must follow the instructions about invoking *************** *** 1087,1091 **** @item m68000-hp-bsd HP 9000 series 200 running BSD. Note that the C compiler that comes ! with this system cannot compile GNU CC; contact @code{law@@cs.utah.edu} to get binaries of GNU CC for bootstrapping. --- 1088,1092 ---- @item m68000-hp-bsd HP 9000 series 200 running BSD. Note that the C compiler that comes ! with this system cannot compile GNU CC; contact @code{law@@cygnus.com} to get binaries of GNU CC for bootstrapping. *************** *** 1397,1406 **** xlc-1.2.1.28 and xlc-1.3.0.24 (PTF 432238) are known to produce working versions of GNU CC, but most other recent releases correctly bootstrap ! GNU CC. Also, releases of AIX prior to AIX 3.2.4 include a version of the IBM assembler which does not accept debugging directives: assembler updates are available as PTFs. Also, if you are using AIX 3.2.5 or greater and the GNU assembler, you must have a version modified after October 16th, 1995 in order for the GNU C compiler to build. See the ! file @file{README.RS6000} for more details on of these problems. GNU CC does not yet support the 64-bit PowerPC instructions. --- 1398,1409 ---- xlc-1.2.1.28 and xlc-1.3.0.24 (PTF 432238) are known to produce working versions of GNU CC, but most other recent releases correctly bootstrap ! GNU CC. ! ! Release 4.3.0 of AIX and ones prior to AIX 3.2.4 include a version of the IBM assembler which does not accept debugging directives: assembler updates are available as PTFs. Also, if you are using AIX 3.2.5 or greater and the GNU assembler, you must have a version modified after October 16th, 1995 in order for the GNU C compiler to build. See the ! file @file{README.RS6000} for more details on any of these problems. GNU CC does not yet support the 64-bit PowerPC instructions. *************** *** 1954,1959 **** @cindex installing GNU CC on the Sun ! On Solaris (version 2.1), do not use the linker or other tools in @file{/usr/ucb} to build GNU CC. Use @code{/usr/ccs/bin}. Make sure the environment variable @code{FLOAT_OPTION} is not set when --- 1957,1966 ---- @cindex installing GNU CC on the Sun ! On Solaris, do not use the linker or other tools in @file{/usr/ucb} to build GNU CC. Use @code{/usr/ccs/bin}. + + If the assembler reports @samp{Error: misaligned data} when bootstrapping, + you are probably using an obsolete version of the GNU assembler. Upgrade + to the latest version of GNU @code{binutils}, or use the Solaris assembler. Make sure the environment variable @code{FLOAT_OPTION} is not set when diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/integrate.c gcc-2.8.1/integrate.c *** gcc-2.8.0/integrate.c Fri Dec 12 07:54:40 1997 --- gcc-2.8.1/integrate.c Sat Feb 28 15:58:19 1998 *************** *** 1,4 **** /* Procedure integration for GNU CC. ! Copyright (C) 1988, 91, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) --- 1,4 ---- /* Procedure integration for GNU CC. ! Copyright (C) 1988, 91, 93-97, 1998 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) *************** *** 78,81 **** --- 78,99 ---- void set_decl_abstract_flags PROTO((tree, int)); + /* Returns the Ith entry in the label_map contained in MAP. If the + Ith entry has not yet been set, return a fresh label. This function + performs a lazy initialization of label_map, thereby avoiding huge memory + explosions when the label_map gets very large. */ + + rtx + get_label_from_map (map, i) + struct inline_remap *map; + int i; + { + rtx x = map->label_map[i]; + + if (x == NULL_RTX) + x = map->label_map[i] = gen_label_rtx(); + + return x; + } + /* Zero if the current function (whose FUNCTION_DECL is FNDECL) is safe and reasonable to integrate into other functions. *************** *** 94,100 **** rtx result; ! /* No inlines with varargs. `grokdeclarator' gives a warning ! message about that if `inline' is specified. This code ! it put in to catch the volunteers. */ if ((last && TREE_VALUE (last) != void_type_node) || current_function_varargs) --- 112,116 ---- rtx result; ! /* No inlines with varargs. */ if ((last && TREE_VALUE (last) != void_type_node) || current_function_varargs) *************** *** 276,279 **** --- 292,296 ---- { rtx p = DECL_RTL (parms); + int copied_incoming = 0; /* If we have (mem (addressof (mem ...))), use the inner MEM since *************** *** 298,302 **** && (XEXP (DECL_RTL (parms), 0) == XEXP (DECL_INCOMING_RTL (parms), 0)))) ! DECL_INCOMING_RTL (parms) = new; DECL_RTL (parms) = new; } --- 315,320 ---- && (XEXP (DECL_RTL (parms), 0) == XEXP (DECL_INCOMING_RTL (parms), 0)))) ! DECL_INCOMING_RTL (parms) = new, copied_incoming = 1; ! DECL_RTL (parms) = new; } *************** *** 320,323 **** --- 338,358 ---- if the function ever modifies the value of the parm. */ TREE_READONLY (parms) = 1; + + /* Copy DECL_INCOMING_RTL if not done already. This can + happen if DECL_RTL is a reg. */ + if (copy && ! copied_incoming) + { + p = DECL_INCOMING_RTL (parms); + + /* If we have (mem (addressof (mem ...))), use the inner MEM since + otherwise the copy_rtx call below will not unshare the MEM since + it shares ADDRESSOF. */ + if (GET_CODE (p) == MEM && GET_CODE (XEXP (p, 0)) == ADDRESSOF + && GET_CODE (XEXP (XEXP (p, 0), 0)) == MEM) + p = XEXP (XEXP (p, 0), 0); + + if (GET_CODE (p) == MEM) + DECL_INCOMING_RTL (parms) = copy_rtx (p); + } } *************** *** 1388,1392 **** if (arg_vals[i] != 0 && GET_CODE (arg_vals[i]) == REG ! && TREE_CODE (TREE_TYPE (formal)) == POINTER_TYPE) mark_reg_pointer (arg_vals[i], (TYPE_ALIGN (TREE_TYPE (TREE_TYPE (formal))) --- 1423,1427 ---- if (arg_vals[i] != 0 && GET_CODE (arg_vals[i]) == REG ! && POINTER_TYPE_P (TREE_TYPE (formal))) mark_reg_pointer (arg_vals[i], (TYPE_ALIGN (TREE_TYPE (TREE_TYPE (formal))) *************** *** 1755,1761 **** expand_start_bindings (0); ! /* Make new label equivalences for the labels in the called function. */ ! for (i = min_labelno; i < max_labelno; i++) ! map->label_map[i] = gen_label_rtx (); /* Perform postincrements before actually calling the function. */ --- 1790,1797 ---- expand_start_bindings (0); ! /* Initialize label_map. get_label_from_map will actually make ! the labels. */ ! bzero ((char *) &map->label_map [min_labelno], ! (max_labelno - min_labelno) * sizeof (rtx)); /* Perform postincrements before actually calling the function. */ *************** *** 1950,1954 **** case CODE_LABEL: ! copy = emit_label (map->label_map[CODE_LABEL_NUMBER (insn)]); LABEL_NAME (copy) = LABEL_NAME (insn); map->const_age++; --- 1986,1991 ---- case CODE_LABEL: ! copy = emit_label (get_label_from_map (map, ! CODE_LABEL_NUMBER (insn))); LABEL_NAME (copy) = LABEL_NAME (insn); map->const_age++; *************** *** 1969,1977 **** && NOTE_LINE_NUMBER (insn) != NOTE_INSN_DELETED) { ! copy = emit_note (NOTE_SOURCE_FILE (insn), NOTE_LINE_NUMBER (insn)); ! if (copy && (NOTE_LINE_NUMBER (copy) == NOTE_INSN_EH_REGION_BEG ! || NOTE_LINE_NUMBER (copy) == NOTE_INSN_EH_REGION_END)) { ! rtx label = map->label_map[NOTE_BLOCK_NUMBER (copy)]; /* We have to forward these both to match the new exception --- 2006,2017 ---- && NOTE_LINE_NUMBER (insn) != NOTE_INSN_DELETED) { ! copy = emit_note (NOTE_SOURCE_FILE (insn), ! NOTE_LINE_NUMBER (insn)); ! if (copy ! && (NOTE_LINE_NUMBER (copy) == NOTE_INSN_EH_REGION_BEG ! || NOTE_LINE_NUMBER (copy) == NOTE_INSN_EH_REGION_END)) { ! rtx label ! = get_label_from_map (map, NOTE_BLOCK_NUMBER (copy)); /* We have to forward these both to match the new exception *************** *** 2388,2399 **** case CODE_LABEL: ! LABEL_PRESERVE_P (map->label_map[CODE_LABEL_NUMBER (orig)]) = LABEL_PRESERVE_P (orig); ! return map->label_map[CODE_LABEL_NUMBER (orig)]; case LABEL_REF: copy = gen_rtx (LABEL_REF, mode, LABEL_REF_NONLOCAL_P (orig) ? XEXP (orig, 0) ! : map->label_map[CODE_LABEL_NUMBER (XEXP (orig, 0))]); LABEL_OUTSIDE_LOOP_P (copy) = LABEL_OUTSIDE_LOOP_P (orig); --- 2428,2440 ---- case CODE_LABEL: ! LABEL_PRESERVE_P (get_label_from_map (map, CODE_LABEL_NUMBER (orig))) = LABEL_PRESERVE_P (orig); ! return get_label_from_map (map, CODE_LABEL_NUMBER (orig)); case LABEL_REF: copy = gen_rtx (LABEL_REF, mode, LABEL_REF_NONLOCAL_P (orig) ? XEXP (orig, 0) ! : get_label_from_map (map, ! CODE_LABEL_NUMBER (XEXP (orig, 0)))); LABEL_OUTSIDE_LOOP_P (copy) = LABEL_OUTSIDE_LOOP_P (orig); diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/integrate.h gcc-2.8.1/integrate.h *** gcc-2.8.0/integrate.h Wed Oct 9 07:25:51 1996 --- gcc-2.8.1/integrate.h Fri Feb 6 18:58:02 1998 *************** *** 1,4 **** /* Function integration definitions for GNU C-Compiler ! Copyright (C) 1990, 1995 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* Function integration definitions for GNU C-Compiler ! Copyright (C) 1990, 1995, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 122,125 **** --- 122,131 ---- extern void mark_stores PROTO((rtx, rtx)); + + /* Return the label indicated. */ + extern rtx get_label_from_map PROTO((struct inline_remap *, int)); + + /* Set the label indicated. */ + #define set_label_in_map(MAP, I, X) ((MAP)->label_map[I] = (X)) /* Unfortunately, we need a global copy of const_equiv map for communication diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/invoke.texi gcc-2.8.1/invoke.texi *** gcc-2.8.0/invoke.texi Wed Dec 31 08:02:44 1997 --- gcc-2.8.1/invoke.texi Tue Feb 17 13:54:05 1998 *************** *** 545,550 **** or otherwise without a suffix that flags them as C++ programs. @code{g++} is a program that calls GNU CC with the default language ! set to C++, and automatically specifies linking against the GNU class ! library libg++. @cindex @code{g++ 1.@var{xx}} @cindex @code{g++}, separate compiler --- 545,550 ---- or otherwise without a suffix that flags them as C++ programs. @code{g++} is a program that calls GNU CC with the default language ! set to C++, and automatically specifies linking against the C++ ! library. @cindex @code{g++ 1.@var{xx}} @cindex @code{g++}, separate compiler *************** *** 994,998 **** default; if you need to use it, the compiler will tell you so. If you compile any of your code with this flag, you must compile @emph{all} of ! your code with this flag (including libg++, if you use it). This flag is not useful when compiling with -fvtable-thunks. --- 994,998 ---- default; if you need to use it, the compiler will tell you so. If you compile any of your code with this flag, you must compile @emph{all} of ! your code with this flag (including the C++ library, if you use it). This flag is not useful when compiling with -fvtable-thunks. *************** *** 1112,1116 **** Do not search for header files in the standard directories specific to C++, but do still search the other standard directories. (This option ! is used when building libg++.) @item -traditional --- 1112,1116 ---- Do not search for header files in the standard directories specific to C++, but do still search the other standard directories. (This option ! is used when building the C++ library.) @item -traditional *************** *** 4988,4992 **** of the CPU on which GNU CC was built if none was specified. - @item -mcpu=@var{cpu type} @item -mcpu=@var{cpu_type} Set the instruction set, register set, and instruction scheduling --- 4988,4991 ---- diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/libgcc2.c gcc-2.8.1/libgcc2.c *** gcc-2.8.0/libgcc2.c Tue Dec 30 06:06:30 1997 --- gcc-2.8.1/libgcc2.c Fri Feb 6 15:50:59 1998 *************** *** 1,5 **** /* More subroutines needed by GCC output code on some machines. */ /* Compile this one with gcc. */ ! /* Copyright (C) 1989, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,5 ---- /* More subroutines needed by GCC output code on some machines. */ /* Compile this one with gcc. */ ! /* Copyright (C) 1989, 92-97, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 934,948 **** { XFtype d; - SItype negate = 0; ! if (u < 0) ! u = -u, negate = 1; ! ! d = (USItype) (u >> WORD_SIZE); d *= HIGH_HALFWORD_COEFF; d *= HIGH_HALFWORD_COEFF; d += (USItype) (u & (HIGH_WORD_COEFF - 1)); ! return (negate ? -d : d); } #endif --- 934,944 ---- { XFtype d; ! d = (SItype) (u >> WORD_SIZE); d *= HIGH_HALFWORD_COEFF; d *= HIGH_HALFWORD_COEFF; d += (USItype) (u & (HIGH_WORD_COEFF - 1)); ! return d; } #endif *************** *** 957,971 **** { TFtype d; - SItype negate = 0; - - if (u < 0) - u = -u, negate = 1; ! d = (USItype) (u >> WORD_SIZE); d *= HIGH_HALFWORD_COEFF; d *= HIGH_HALFWORD_COEFF; d += (USItype) (u & (HIGH_WORD_COEFF - 1)); ! return (negate ? -d : d); } #endif --- 953,963 ---- { TFtype d; ! d = (SItype) (u >> WORD_SIZE); d *= HIGH_HALFWORD_COEFF; d *= HIGH_HALFWORD_COEFF; d += (USItype) (u & (HIGH_WORD_COEFF - 1)); ! return d; } #endif *************** *** 980,994 **** { DFtype d; - SItype negate = 0; - - if (u < 0) - u = -u, negate = 1; ! d = (USItype) (u >> WORD_SIZE); d *= HIGH_HALFWORD_COEFF; d *= HIGH_HALFWORD_COEFF; d += (USItype) (u & (HIGH_WORD_COEFF - 1)); ! return (negate ? -d : d); } #endif --- 972,982 ---- { DFtype d; ! d = (SItype) (u >> WORD_SIZE); d *= HIGH_HALFWORD_COEFF; d *= HIGH_HALFWORD_COEFF; d += (USItype) (u & (HIGH_WORD_COEFF - 1)); ! return d; } #endif *************** *** 1035,1042 **** while multiplying it. */ DFtype f; - SItype negate = 0; - - if (u < 0) - u = -u, negate = 1; /* Protect against double-rounding error. --- 1023,1026 ---- *************** *** 1050,1054 **** { #define REP_BIT ((USItype) 1 << (DI_SIZE - DF_SIZE)) ! if (u >= ((UDItype) 1 << DF_SIZE)) { if ((USItype) u & (REP_BIT - 1)) --- 1034,1039 ---- { #define REP_BIT ((USItype) 1 << (DI_SIZE - DF_SIZE)) ! if (! (- ((UDItype) 1 << DF_SIZE) < u ! && u < ((UDItype) 1 << DF_SIZE))) { if ((USItype) u & (REP_BIT - 1)) *************** *** 1056,1065 **** } } ! f = (USItype) (u >> WORD_SIZE); f *= HIGH_HALFWORD_COEFF; f *= HIGH_HALFWORD_COEFF; f += (USItype) (u & (HIGH_WORD_COEFF - 1)); ! return (SFtype) (negate ? -f : f); } #endif --- 1041,1050 ---- } } ! f = (SItype) (u >> WORD_SIZE); f *= HIGH_HALFWORD_COEFF; f *= HIGH_HALFWORD_COEFF; f += (USItype) (u & (HIGH_WORD_COEFF - 1)); ! return (SFtype) f; } #endif *************** *** 2874,2878 **** --- 2859,2866 ---- /* Motorola forgot to put memctl.o in the libp version of libc881.a, so define it here, because we need it in __clear_insn_cache below */ + /* On older versions of this OS, no memctl or MCT_TEXT are defined; + hence we enable this stuff only if MCT_TEXT is #define'd. */ + #ifdef MCT_TEXT asm("\n\ global memctl\n\ *************** *** 2885,2888 **** --- 2873,2877 ---- movq &0,%d0\n\ rts"); + #endif /* Clear instruction cache so we can call trampolines on stack. *************** *** 2892,2895 **** --- 2881,2885 ---- __clear_insn_cache () { + #ifdef MCT_TEXT int save_errno; *************** *** 2902,2905 **** --- 2892,2896 ---- memctl(0, 4096, MCT_TEXT); errno = save_errno; + #endif } diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/loop.c gcc-2.8.1/loop.c *** gcc-2.8.0/loop.c Sun Nov 9 09:17:33 1997 --- gcc-2.8.1/loop.c Fri Feb 6 14:23:34 1998 *************** *** 1,4 **** /* Perform various loop optimizations, including strength reduction. ! Copyright (C) 1987, 88, 89, 91-6, 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* Perform various loop optimizations, including strength reduction. ! Copyright (C) 1987, 88, 89, 91-97, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 3998,4003 **** } /* Check for case where increment is before the the address ! giv. */ ! else if (INSN_LUID (v->insn) > INSN_LUID (bl->biv->insn)) auto_inc_opt = -1; else --- 3998,4009 ---- } /* Check for case where increment is before the the address ! giv. Do this test in "loop order". */ ! else if ((INSN_LUID (v->insn) > INSN_LUID (bl->biv->insn) ! && (INSN_LUID (v->insn) < INSN_LUID (scan_start) ! || (INSN_LUID (bl->biv->insn) ! > INSN_LUID (scan_start)))) ! || (INSN_LUID (v->insn) < INSN_LUID (scan_start) ! && (INSN_LUID (scan_start) ! < INSN_LUID (bl->biv->insn)))) auto_inc_opt = -1; else diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/md.texi gcc-2.8.1/md.texi *** gcc-2.8.0/md.texi Tue Dec 23 21:42:19 1997 --- gcc-2.8.1/md.texi Thu Feb 19 18:23:32 1998 *************** *** 1670,1674 **** generation pass of the compiler. Giving one of these names to an instruction pattern tells the RTL generation pass that it can use the ! pattern in to accomplish a certain task. @table @asis --- 1670,1674 ---- generation pass of the compiler. Giving one of these names to an instruction pattern tells the RTL generation pass that it can use the ! pattern to accomplish a certain task. @table @asis *************** *** 1950,1954 **** --- 1950,1961 ---- Block move instruction. The addresses of the destination and source strings are the first two operands, and both are in mode @code{Pmode}. + The number of bytes to move is the third operand, in mode @var{m}. + Usually, you specify @code{word_mode} for @var{m}. However, if you can + generate better code knowing the range of valid lengths is smaller than + those representable in a full word, you should provide a pattern with a + mode corresponding to the range of values you can handle efficiently + (e.g., @code{QImode} for values in the range 0--127; note we avoid numbers + that appear negative) and also a pattern with @code{word_mode}. The fourth operand is the known shared alignment of the source and *************** *** 1964,1968 **** Block clear instruction. The addresses of the destination string is the first operand, in mode @code{Pmode}. The number of bytes to clear is ! the second operand, in mode @var{m}. The third operand is the known alignment of the destination, in the form --- 1971,1976 ---- Block clear instruction. The addresses of the destination string is the first operand, in mode @code{Pmode}. The number of bytes to clear is ! the second operand, in mode @var{m}. See @samp{movstr@var{m}} for ! a discussion of the choice of mode. The third operand is the known alignment of the destination, in the form diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/mips-tfile.c gcc-2.8.1/mips-tfile.c *** gcc-2.8.0/mips-tfile.c Wed Nov 26 14:28:42 1997 --- gcc-2.8.1/mips-tfile.c Tue Feb 3 15:58:41 1998 *************** *** 3,8 **** in the form of comments (the mips assembler does not support assembly access to debug information). ! Copyright (C) 1991, 1993, 1994, 1995, 1997 Free Software Foundation, Inc. ! Contributed by Michael Meissner, meissner@osf.org This file is part of GNU CC. --- 3,8 ---- in the form of comments (the mips assembler does not support assembly access to debug information). ! Copyright (C) 1991, 93, 94, 95, 97, 1998 Free Software Foundation, Inc. ! Contributed by Michael Meissner (meissner@cygnus.com). This file is part of GNU CC. *************** *** 1756,1763 **** STATIC char *local_rindex __proto((const char *, int)); ! #ifndef __alpha extern char *sbrk __proto((int)); extern void free __proto((PTR_T)); #endif extern char *mktemp __proto((char *)); extern long strtol __proto((const char *, char **, int)); --- 1756,1767 ---- STATIC char *local_rindex __proto((const char *, int)); ! #ifdef NEED_DECLARTION_SBRK extern char *sbrk __proto((int)); + #endif + + #ifdef NEED_DECLARATION_FREE extern void free __proto((PTR_T)); #endif + extern char *mktemp __proto((char *)); extern long strtol __proto((const char *, char **, int)); diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/objc/Make-lang.in gcc-2.8.1/objc/Make-lang.in *** gcc-2.8.0/objc/Make-lang.in Mon Dec 22 18:30:14 1997 --- gcc-2.8.1/objc/Make-lang.in Mon Mar 2 19:38:19 1998 *************** *** 1,4 **** # Top level makefile fragment for GNU Objective-C ! # Copyright (C) 1997 Free Software Foundation, Inc. #This file is part of GNU CC. --- 1,4 ---- # Top level makefile fragment for GNU Objective-C ! # Copyright (C) 1997, 1998 Free Software Foundation, Inc. #This file is part of GNU CC. *************** *** 131,135 **** $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) \ -c $(srcdir)/objc/class.c -o $@ ! objc/sendmsg.o: $(srcdir)/objc/sendmsg.c $(GCC_PASSES) $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) -Iobjc \ -c $(srcdir)/objc/sendmsg.c -o $@ --- 131,135 ---- $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) \ -c $(srcdir)/objc/class.c -o $@ ! objc/sendmsg.o: $(srcdir)/objc/sendmsg.c $(GCC_PASSES) objc/runtime-info.h $(GCC_FOR_TARGET) $(GCC_CFLAGS) $(INCLUDES) -Iobjc \ -c $(srcdir)/objc/sendmsg.c -o $@ *************** *** 208,215 **** # Platform generated information needed by ObjC runtime objc/runtime-info.h: cc1obj ! echo "" > emptyfile echo "/* This file is automatically generated */" >$@ ! ./cc1obj -print-objc-runtime-info emptyfile >>$@ ! # # Build hooks: --- 208,215 ---- # Platform generated information needed by ObjC runtime objc/runtime-info.h: cc1obj ! echo "" > tmp-runtime echo "/* This file is automatically generated */" >$@ ! ./cc1obj -print-objc-runtime-info tmp-runtime >>$@ ! rm -f tmp-runtime # # Build hooks: *************** *** 278,294 **** # Stage hooks: ! objc.stage1: -mv objc/*$(objext) stage1/objc -mv cc1obj$(exeext) stage1 -mv libobjc.a stage1 ! objc.stage2: -mv objc/*$(objext) stage2/objc -mv cc1obj$(exeext) stage2 -mv libobjc.a stage2 ! objc.stage3: -mv objc/*$(objext) stage3/objc -mv cc1obj$(exeext) stage3 -mv libobjc.a stage3 ! objc.stage4: -mv objc/*$(objext) stage4/objc -mv cc1obj$(exeext) stage4 --- 278,294 ---- # Stage hooks: ! objc.stage1: stage1-start -mv objc/*$(objext) stage1/objc -mv cc1obj$(exeext) stage1 -mv libobjc.a stage1 ! objc.stage2: stage2-start -mv objc/*$(objext) stage2/objc -mv cc1obj$(exeext) stage2 -mv libobjc.a stage2 ! objc.stage3: stage3-start -mv objc/*$(objext) stage3/objc -mv cc1obj$(exeext) stage3 -mv libobjc.a stage3 ! objc.stage4: stage4-start -mv objc/*$(objext) stage4/objc -mv cc1obj$(exeext) stage4 *************** *** 300,306 **** # This target creates the files that can be rebuilt, but go in the # distribution anyway. It then copies the files to the distdir directory. ! objc.distdir: mkdir tmp/objc ! cd objc ; $(MAKE) $(FLAGS_TO_PASS) objc-parse.c cd objc; \ for file in *[0-9a-zA-Z+]; do \ --- 300,308 ---- # This target creates the files that can be rebuilt, but go in the # distribution anyway. It then copies the files to the distdir directory. ! # ??? Note that this should be fixed once the Makefile is fixed to do ! # the build in the inner directory. ! objc.distdir: $(srcdir)/objc/objc-parse.c mkdir tmp/objc ! # cd objc ; $(MAKE) $(FLAGS_TO_PASS) objc-parse.c cd objc; \ for file in *[0-9a-zA-Z+]; do \ diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/objc/config-lang.in gcc-2.8.1/objc/config-lang.in *** gcc-2.8.0/objc/config-lang.in Fri Jun 27 18:39:02 1997 --- gcc-2.8.1/objc/config-lang.in Fri Feb 6 21:54:28 1998 *************** *** 1,4 **** # Top level configure fragment for the GNU Objective-C Runtime Library. ! # Copyright (C) 1997 Free Software Foundation, Inc. #This file is part of GNU CC. --- 1,4 ---- # Top level configure fragment for the GNU Objective-C Runtime Library. ! # Copyright (C) 1997, 1998 Free Software Foundation, Inc. #This file is part of GNU CC. *************** *** 33,37 **** stagestuff="" ! diff_excludes="" echo "Using \`$srcdir/objc/thr-${thread_file}.c' as Objective-C Runtime thread file." --- 33,37 ---- stagestuff="" ! diff_excludes="-x objc-parse.c -x objc-parse.y " echo "Using \`$srcdir/objc/thr-${thread_file}.c' as Objective-C Runtime thread file." diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/obstack.h gcc-2.8.1/obstack.h *** gcc-2.8.0/obstack.h Sun Oct 26 19:14:42 1997 --- gcc-2.8.1/obstack.h Fri Feb 20 08:21:47 1998 *************** *** 1,4 **** /* obstack.h - object stack macros ! Copyright (C) 1988,89,90,91,92,93,94,96,97 Free Software Foundation, Inc. the C library, however. The master source lives in /gd/gnu/lib. --- 1,4 ---- /* obstack.h - object stack macros ! Copyright (C) 1988,89,90,91,92,93,94,96,97,98 Free Software Foundation, Inc. the C library, however. The master source lives in /gd/gnu/lib. *************** *** 119,161 **** #ifndef __PTR_TO_INT ! #define __PTR_TO_INT(P) ((P) - (char *) 0) #endif #ifndef __INT_TO_PTR ! #define __INT_TO_PTR(P) ((P) + (char *) 0) #endif ! /* We need the type of the resulting object. In ANSI C it is ptrdiff_t ! but in traditional C it is usually long. If we are in ANSI C and ! don't already have ptrdiff_t get it. */ ! ! #if defined (__STDC__) && __STDC__ && ! defined (offsetof) ! #if defined (__GNUC__) && defined (IN_GCC) ! /* On Next machine, the system's stddef.h screws up if included ! after we have defined just ptrdiff_t, so include all of stddef.h. ! Otherwise, define just ptrdiff_t, which is all we need. */ ! #ifndef __NeXT__ ! #define __need_ptrdiff_t ! #endif ! #endif ! #include ! #endif ! ! #if defined (__STDC__) && __STDC__ ! #define PTR_INT_TYPE ptrdiff_t #else ! #define PTR_INT_TYPE long #endif ! #if defined (_LIBC) || defined (HAVE_STRING_H) ! #include ! #define _obstack_memcpy(To, From, N) memcpy ((To), (From), (N)) ! #else ! #ifdef memcpy ! #define _obstack_memcpy(To, From, N) memcpy ((To), (From), (N)) #else ! #define _obstack_memcpy(To, From, N) bcopy ((From), (To), (N)) ! #endif #endif --- 119,155 ---- #ifndef __PTR_TO_INT ! # define __PTR_TO_INT(P) ((P) - (char *) 0) #endif #ifndef __INT_TO_PTR ! # define __INT_TO_PTR(P) ((P) + (char *) 0) #endif ! /* We need the type of the resulting object. If __PTRDIFF_TYPE__ is ! defined, as with GNU C, use that; that way we don't pollute the ! namespace with 's symbols. Otherwise, if is ! available, include it and use ptrdiff_t. In traditional C, long is ! the best that we can do. */ ! #ifdef __PTRDIFF_TYPE__ ! # define PTR_INT_TYPE __PTRDIFF_TYPE__ #else ! # ifdef HAVE_STDDEF_H ! # include ! # define PTR_INT_TYPE ptrdiff_t ! # else ! # define PTR_INT_TYPE long ! # endif #endif ! #if defined _LIBC || defined HAVE_STRING_H ! # include ! # define _obstack_memcpy(To, From, N) memcpy ((To), (From), (N)) #else ! # ifdef memcpy ! # define _obstack_memcpy(To, From, N) memcpy ((To), (From), (N)) ! # else ! # define _obstack_memcpy(To, From, N) bcopy ((From), (To), (N)) ! # endif #endif *************** *** 176,180 **** PTR_INT_TYPE temp; /* Temporary for some macros. */ int alignment_mask; /* Mask of alignment for each object. */ ! #if defined (__STDC__) && __STDC__ /* These prototypes vary based on `use_extra_arg', and we use casts to the prototypeless function type in all assignments, --- 170,174 ---- PTR_INT_TYPE temp; /* Temporary for some macros. */ int alignment_mask; /* Mask of alignment for each object. */ ! #if defined __STDC__ && __STDC__ /* These prototypes vary based on `use_extra_arg', and we use casts to the prototypeless function type in all assignments, *************** *** 200,204 **** /* Declare the external functions we use; they are in obstack.c. */ ! #if defined (__STDC__) && __STDC__ extern void _obstack_newchunk (struct obstack *, int); extern void _obstack_free (struct obstack *, void *); --- 194,198 ---- /* Declare the external functions we use; they are in obstack.c. */ ! #if defined __STDC__ && __STDC__ extern void _obstack_newchunk (struct obstack *, int); extern void _obstack_free (struct obstack *, void *); *************** *** 217,221 **** #endif ! #if defined (__STDC__) && __STDC__ /* Do the function-declarations after the structs --- 211,215 ---- #endif ! #if defined __STDC__ && __STDC__ /* Do the function-declarations after the structs *************** *** 265,269 **** more memory. This can be set to a user defined function. The default action is to print a message and abort. */ ! #if defined (__STDC__) && __STDC__ extern void (*obstack_alloc_failed_handler) (void); #else --- 259,263 ---- more memory. This can be set to a user defined function. The default action is to print a message and abort. */ ! #if defined __STDC__ && __STDC__ extern void (*obstack_alloc_failed_handler) (void); #else *************** *** 294,344 **** /* To prevent prototype warnings provide complete argument list in standard C version. */ ! #if defined (__STDC__) && __STDC__ ! #define obstack_init(h) \ _obstack_begin ((h), 0, 0, \ (void *(*) (long)) obstack_chunk_alloc, (void (*) (void *)) obstack_chunk_free) ! #define obstack_begin(h, size) \ _obstack_begin ((h), (size), 0, \ (void *(*) (long)) obstack_chunk_alloc, (void (*) (void *)) obstack_chunk_free) ! #define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \ _obstack_begin ((h), (size), (alignment), \ (void *(*) (long)) (chunkfun), (void (*) (void *)) (freefun)) ! #define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \ _obstack_begin_1 ((h), (size), (alignment), \ (void *(*) (void *, long)) (chunkfun), \ (void (*) (void *, void *)) (freefun), (arg)) ! #define obstack_chunkfun(h, newchunkfun) \ ((h) -> chunkfun = (struct _obstack_chunk *(*)(void *, long)) (newchunkfun)) ! #define obstack_freefun(h, newfreefun) \ ((h) -> freefun = (void (*)(void *, struct _obstack_chunk *)) (newfreefun)) #else ! #define obstack_init(h) \ _obstack_begin ((h), 0, 0, \ (void *(*) ()) obstack_chunk_alloc, (void (*) ()) obstack_chunk_free) ! #define obstack_begin(h, size) \ _obstack_begin ((h), (size), 0, \ (void *(*) ()) obstack_chunk_alloc, (void (*) ()) obstack_chunk_free) ! #define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \ _obstack_begin ((h), (size), (alignment), \ (void *(*) ()) (chunkfun), (void (*) ()) (freefun)) ! #define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \ _obstack_begin_1 ((h), (size), (alignment), \ (void *(*) ()) (chunkfun), (void (*) ()) (freefun), (arg)) ! #define obstack_chunkfun(h, newchunkfun) \ ((h) -> chunkfun = (struct _obstack_chunk *(*)()) (newchunkfun)) ! #define obstack_freefun(h, newfreefun) \ ((h) -> freefun = (void (*)()) (newfreefun)) --- 288,338 ---- /* To prevent prototype warnings provide complete argument list in standard C version. */ ! #if defined __STDC__ && __STDC__ ! # define obstack_init(h) \ _obstack_begin ((h), 0, 0, \ (void *(*) (long)) obstack_chunk_alloc, (void (*) (void *)) obstack_chunk_free) ! # define obstack_begin(h, size) \ _obstack_begin ((h), (size), 0, \ (void *(*) (long)) obstack_chunk_alloc, (void (*) (void *)) obstack_chunk_free) ! # define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \ _obstack_begin ((h), (size), (alignment), \ (void *(*) (long)) (chunkfun), (void (*) (void *)) (freefun)) ! # define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \ _obstack_begin_1 ((h), (size), (alignment), \ (void *(*) (void *, long)) (chunkfun), \ (void (*) (void *, void *)) (freefun), (arg)) ! # define obstack_chunkfun(h, newchunkfun) \ ((h) -> chunkfun = (struct _obstack_chunk *(*)(void *, long)) (newchunkfun)) ! # define obstack_freefun(h, newfreefun) \ ((h) -> freefun = (void (*)(void *, struct _obstack_chunk *)) (newfreefun)) #else ! # define obstack_init(h) \ _obstack_begin ((h), 0, 0, \ (void *(*) ()) obstack_chunk_alloc, (void (*) ()) obstack_chunk_free) ! # define obstack_begin(h, size) \ _obstack_begin ((h), (size), 0, \ (void *(*) ()) obstack_chunk_alloc, (void (*) ()) obstack_chunk_free) ! # define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \ _obstack_begin ((h), (size), (alignment), \ (void *(*) ()) (chunkfun), (void (*) ()) (freefun)) ! # define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \ _obstack_begin_1 ((h), (size), (alignment), \ (void *(*) ()) (chunkfun), (void (*) ()) (freefun), (arg)) ! # define obstack_chunkfun(h, newchunkfun) \ ((h) -> chunkfun = (struct _obstack_chunk *(*)()) (newchunkfun)) ! # define obstack_freefun(h, newfreefun) \ ((h) -> freefun = (void (*)()) (newfreefun)) *************** *** 351,361 **** #define obstack_memory_used(h) _obstack_memory_used (h) ! #if defined (__GNUC__) && defined (__STDC__) && __STDC__ /* NextStep 2.0 cc is really gcc 1.93 but it defines __GNUC__ = 2 and does not implement __extension__. But that compiler doesn't define __GNUC_MINOR__. */ ! #if __GNUC__ < 2 || (__NeXT__ && !__GNUC_MINOR__) ! #define __extension__ ! #endif /* For GNU C, if not -traditional, --- 345,355 ---- #define obstack_memory_used(h) _obstack_memory_used (h) ! #if defined __GNUC__ && defined __STDC__ && __STDC__ /* NextStep 2.0 cc is really gcc 1.93 but it defines __GNUC__ = 2 and does not implement __extension__. But that compiler doesn't define __GNUC_MINOR__. */ ! # if __GNUC__ < 2 || (__NeXT__ && !__GNUC_MINOR__) ! # define __extension__ ! # endif /* For GNU C, if not -traditional, *************** *** 364,378 **** Also, we can avoid using the `temp' slot, to make faster code. */ ! #define obstack_object_size(OBSTACK) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ (unsigned) (__o->next_free - __o->object_base); }) ! #define obstack_room(OBSTACK) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ (unsigned) (__o->chunk_limit - __o->next_free); }) ! #define obstack_make_room(OBSTACK,length) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ --- 358,372 ---- Also, we can avoid using the `temp' slot, to make faster code. */ ! # define obstack_object_size(OBSTACK) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ (unsigned) (__o->next_free - __o->object_base); }) ! # define obstack_room(OBSTACK) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ (unsigned) (__o->chunk_limit - __o->next_free); }) ! # define obstack_make_room(OBSTACK,length) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ *************** *** 382,391 **** (void) 0; }) ! #define obstack_empty_p(OBSTACK) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ (__o->chunk->prev == 0 && __o->next_free - __o->chunk->contents == 0); }) ! #define obstack_grow(OBSTACK,where,length) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ --- 376,385 ---- (void) 0; }) ! # define obstack_empty_p(OBSTACK) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ (__o->chunk->prev == 0 && __o->next_free - __o->chunk->contents == 0); }) ! # define obstack_grow(OBSTACK,where,length) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ *************** *** 397,401 **** (void) 0; }) ! #define obstack_grow0(OBSTACK,where,length) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ --- 391,395 ---- (void) 0; }) ! # define obstack_grow0(OBSTACK,where,length) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ *************** *** 408,412 **** (void) 0; }) ! #define obstack_1grow(OBSTACK,datum) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ --- 402,406 ---- (void) 0; }) ! # define obstack_1grow(OBSTACK,datum) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ *************** *** 420,424 **** shares that much alignment. */ ! #define obstack_ptr_grow(OBSTACK,datum) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ --- 414,418 ---- shares that much alignment. */ ! # define obstack_ptr_grow(OBSTACK,datum) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ *************** *** 428,432 **** (void) 0; }) ! #define obstack_int_grow(OBSTACK,datum) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ --- 422,426 ---- (void) 0; }) ! # define obstack_int_grow(OBSTACK,datum) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ *************** *** 436,443 **** (void) 0; }) ! #define obstack_ptr_grow_fast(h,aptr) (*((void **) (h)->next_free)++ = (void *)aptr) ! #define obstack_int_grow_fast(h,aint) (*((int *) (h)->next_free)++ = (int) aint) ! #define obstack_blank(OBSTACK,length) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ --- 430,437 ---- (void) 0; }) ! # define obstack_ptr_grow_fast(h,aptr) (*((void **) (h)->next_free)++ = (void *)aptr) ! # define obstack_int_grow_fast(h,aint) (*((int *) (h)->next_free)++ = (int) aint) ! # define obstack_blank(OBSTACK,length) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ *************** *** 448,452 **** (void) 0; }) ! #define obstack_alloc(OBSTACK,length) \ __extension__ \ ({ struct obstack *__h = (OBSTACK); \ --- 442,446 ---- (void) 0; }) ! # define obstack_alloc(OBSTACK,length) \ __extension__ \ ({ struct obstack *__h = (OBSTACK); \ *************** *** 454,458 **** obstack_finish (__h); }) ! #define obstack_copy(OBSTACK,where,length) \ __extension__ \ ({ struct obstack *__h = (OBSTACK); \ --- 448,452 ---- obstack_finish (__h); }) ! # define obstack_copy(OBSTACK,where,length) \ __extension__ \ ({ struct obstack *__h = (OBSTACK); \ *************** *** 460,464 **** obstack_finish (__h); }) ! #define obstack_copy0(OBSTACK,where,length) \ __extension__ \ ({ struct obstack *__h = (OBSTACK); \ --- 454,458 ---- obstack_finish (__h); }) ! # define obstack_copy0(OBSTACK,where,length) \ __extension__ \ ({ struct obstack *__h = (OBSTACK); \ *************** *** 468,472 **** /* The local variable is named __o1 to avoid a name conflict when obstack_blank is called. */ ! #define obstack_finish(OBSTACK) \ __extension__ \ ({ struct obstack *__o1 = (OBSTACK); \ --- 462,466 ---- /* The local variable is named __o1 to avoid a name conflict when obstack_blank is called. */ ! # define obstack_finish(OBSTACK) \ __extension__ \ ({ struct obstack *__o1 = (OBSTACK); \ *************** *** 484,488 **** value; }) ! #define obstack_free(OBSTACK, OBJ) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ --- 478,482 ---- value; }) ! # define obstack_free(OBSTACK, OBJ) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ *************** *** 494,504 **** #else /* not __GNUC__ or not __STDC__ */ ! #define obstack_object_size(h) \ (unsigned) ((h)->next_free - (h)->object_base) ! #define obstack_room(h) \ (unsigned) ((h)->chunk_limit - (h)->next_free) ! #define obstack_empty_p(h) \ ((h)->chunk->prev == 0 && (h)->next_free - (h)->chunk->contents == 0) --- 488,498 ---- #else /* not __GNUC__ or not __STDC__ */ ! # define obstack_object_size(h) \ (unsigned) ((h)->next_free - (h)->object_base) ! # define obstack_room(h) \ (unsigned) ((h)->chunk_limit - (h)->next_free) ! # define obstack_empty_p(h) \ ((h)->chunk->prev == 0 && (h)->next_free - (h)->chunk->contents == 0) *************** *** 509,518 **** but some compilers won't accept it. */ ! #define obstack_make_room(h,length) \ ( (h)->temp = (length), \ (((h)->next_free + (h)->temp > (h)->chunk_limit) \ ? (_obstack_newchunk ((h), (h)->temp), 0) : 0)) ! #define obstack_grow(h,where,length) \ ( (h)->temp = (length), \ (((h)->next_free + (h)->temp > (h)->chunk_limit) \ --- 503,512 ---- but some compilers won't accept it. */ ! # define obstack_make_room(h,length) \ ( (h)->temp = (length), \ (((h)->next_free + (h)->temp > (h)->chunk_limit) \ ? (_obstack_newchunk ((h), (h)->temp), 0) : 0)) ! # define obstack_grow(h,where,length) \ ( (h)->temp = (length), \ (((h)->next_free + (h)->temp > (h)->chunk_limit) \ *************** *** 521,525 **** (h)->next_free += (h)->temp) ! #define obstack_grow0(h,where,length) \ ( (h)->temp = (length), \ (((h)->next_free + (h)->temp + 1 > (h)->chunk_limit) \ --- 515,519 ---- (h)->next_free += (h)->temp) ! # define obstack_grow0(h,where,length) \ ( (h)->temp = (length), \ (((h)->next_free + (h)->temp + 1 > (h)->chunk_limit) \ *************** *** 529,551 **** *((h)->next_free)++ = 0) ! #define obstack_1grow(h,datum) \ ( (((h)->next_free + 1 > (h)->chunk_limit) \ ? (_obstack_newchunk ((h), 1), 0) : 0), \ (*((h)->next_free)++ = (datum))) ! #define obstack_ptr_grow(h,datum) \ ( (((h)->next_free + sizeof (char *) > (h)->chunk_limit) \ ? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0), \ (*((char **) (((h)->next_free+=sizeof(char *))-sizeof(char *))) = ((char *) datum))) ! #define obstack_int_grow(h,datum) \ ( (((h)->next_free + sizeof (int) > (h)->chunk_limit) \ ? (_obstack_newchunk ((h), sizeof (int)), 0) : 0), \ (*((int *) (((h)->next_free+=sizeof(int))-sizeof(int))) = ((int) datum))) ! #define obstack_ptr_grow_fast(h,aptr) (*((char **) (h)->next_free)++ = (char *) aptr) ! #define obstack_int_grow_fast(h,aint) (*((int *) (h)->next_free)++ = (int) aint) ! #define obstack_blank(h,length) \ ( (h)->temp = (length), \ (((h)->chunk_limit - (h)->next_free < (h)->temp) \ --- 523,545 ---- *((h)->next_free)++ = 0) ! # define obstack_1grow(h,datum) \ ( (((h)->next_free + 1 > (h)->chunk_limit) \ ? (_obstack_newchunk ((h), 1), 0) : 0), \ (*((h)->next_free)++ = (datum))) ! # define obstack_ptr_grow(h,datum) \ ( (((h)->next_free + sizeof (char *) > (h)->chunk_limit) \ ? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0), \ (*((char **) (((h)->next_free+=sizeof(char *))-sizeof(char *))) = ((char *) datum))) ! # define obstack_int_grow(h,datum) \ ( (((h)->next_free + sizeof (int) > (h)->chunk_limit) \ ? (_obstack_newchunk ((h), sizeof (int)), 0) : 0), \ (*((int *) (((h)->next_free+=sizeof(int))-sizeof(int))) = ((int) datum))) ! # define obstack_ptr_grow_fast(h,aptr) (*((char **) (h)->next_free)++ = (char *) aptr) ! # define obstack_int_grow_fast(h,aint) (*((int *) (h)->next_free)++ = (int) aint) ! # define obstack_blank(h,length) \ ( (h)->temp = (length), \ (((h)->chunk_limit - (h)->next_free < (h)->temp) \ *************** *** 553,566 **** ((h)->next_free += (h)->temp)) ! #define obstack_alloc(h,length) \ (obstack_blank ((h), (length)), obstack_finish ((h))) ! #define obstack_copy(h,where,length) \ (obstack_grow ((h), (where), (length)), obstack_finish ((h))) ! #define obstack_copy0(h,where,length) \ (obstack_grow0 ((h), (where), (length)), obstack_finish ((h))) ! #define obstack_finish(h) \ ( ((h)->next_free == (h)->object_base \ ? (((h)->maybe_empty_object = 1), 0) \ --- 547,560 ---- ((h)->next_free += (h)->temp)) ! # define obstack_alloc(h,length) \ (obstack_blank ((h), (length)), obstack_finish ((h))) ! # define obstack_copy(h,where,length) \ (obstack_grow ((h), (where), (length)), obstack_finish ((h))) ! # define obstack_copy0(h,where,length) \ (obstack_grow0 ((h), (where), (length)), obstack_finish ((h))) ! # define obstack_finish(h) \ ( ((h)->next_free == (h)->object_base \ ? (((h)->maybe_empty_object = 1), 0) \ *************** *** 576,581 **** __INT_TO_PTR ((h)->temp)) ! #if defined (__STDC__) && __STDC__ ! #define obstack_free(h,obj) \ ( (h)->temp = (char *) (obj) - (char *) (h)->chunk, \ (((h)->temp > 0 && (h)->temp < (h)->chunk_limit - (char *) (h)->chunk)\ --- 570,575 ---- __INT_TO_PTR ((h)->temp)) ! # if defined __STDC__ && __STDC__ ! # define obstack_free(h,obj) \ ( (h)->temp = (char *) (obj) - (char *) (h)->chunk, \ (((h)->temp > 0 && (h)->temp < (h)->chunk_limit - (char *) (h)->chunk)\ *************** *** 583,588 **** = (h)->temp + (char *) (h)->chunk) \ : (((obstack_free) ((h), (h)->temp + (char *) (h)->chunk), 0), 0))) ! #else ! #define obstack_free(h,obj) \ ( (h)->temp = (char *) (obj) - (char *) (h)->chunk, \ (((h)->temp > 0 && (h)->temp < (h)->chunk_limit - (char *) (h)->chunk)\ --- 577,582 ---- = (h)->temp + (char *) (h)->chunk) \ : (((obstack_free) ((h), (h)->temp + (char *) (h)->chunk), 0), 0))) ! # else ! # define obstack_free(h,obj) \ ( (h)->temp = (char *) (obj) - (char *) (h)->chunk, \ (((h)->temp > 0 && (h)->temp < (h)->chunk_limit - (char *) (h)->chunk)\ *************** *** 590,594 **** = (h)->temp + (char *) (h)->chunk) \ : (_obstack_free ((h), (h)->temp + (char *) (h)->chunk), 0))) ! #endif #endif /* not __GNUC__ or not __STDC__ */ --- 584,588 ---- = (h)->temp + (char *) (h)->chunk) \ : (_obstack_free ((h), (h)->temp + (char *) (h)->chunk), 0))) ! # endif #endif /* not __GNUC__ or not __STDC__ */ diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/optabs.c gcc-2.8.1/optabs.c *** gcc-2.8.0/optabs.c Sat Oct 18 09:34:49 1997 --- gcc-2.8.1/optabs.c Sat Feb 14 06:41:17 1998 *************** *** 1,4 **** /* Expand the basic unary and binary arithmetic operations, for GNU compiler. ! Copyright (C) 1987, 88, 92-96, 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* Expand the basic unary and binary arithmetic operations, for GNU compiler. ! Copyright (C) 1987, 88, 92-97, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 126,130 **** rtx setjmp_libfunc; rtx longjmp_libfunc; - rtx get_dynamic_handler_chain_libfunc; rtx eqhf2_libfunc; --- 126,129 ---- *************** *** 3183,3195 **** cmode = GET_MODE (op0); ! if ((CONSTANT_P (op2) && ! CONSTANT_P (op3)) ! || (GET_CODE (op2) == CONST_INT && GET_CODE (op3) != CONST_INT)) { tem = op2; op2 = op3; op3 = tem; - /* ??? This may not be appropriate (consider IEEE). Perhaps we should - call can_reverse_comparison_p here and bail out if necessary. - It's not clear whether we need to do this canonicalization though. */ code = reverse_condition (code); } --- 3182,3193 ---- cmode = GET_MODE (op0); ! if (((CONSTANT_P (op2) && ! CONSTANT_P (op3)) ! || (GET_CODE (op2) == CONST_INT && GET_CODE (op3) != CONST_INT)) ! && (GET_MODE_CLASS (GET_MODE (op1)) != MODE_FLOAT ! || TARGET_FLOAT_FORMAT != IEEE_FLOAT_FORMAT || flag_fast_math)) { tem = op2; op2 = op3; op3 = tem; code = reverse_condition (code); } *************** *** 4307,4311 **** longjmp_libfunc = gen_rtx (SYMBOL_REF, Pmode, "longjmp"); #endif - get_dynamic_handler_chain_libfunc = gen_rtx (SYMBOL_REF, Pmode, "__get_dynamic_handler_chain"); eqhf2_libfunc = gen_rtx (SYMBOL_REF, Pmode, "__eqhf2"); --- 4305,4308 ---- diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/prefix.c gcc-2.8.1/prefix.c *** gcc-2.8.0/prefix.c Sat Oct 25 20:16:19 1997 --- gcc-2.8.1/prefix.c Fri Feb 6 09:04:22 1998 *************** *** 1,4 **** /* Utility to update paths from internal to external forms. ! Copyright (C) 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* Utility to update paths from internal to external forms. ! Copyright (C) 1997, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 103,109 **** prefix = getenv (concat (key, "_ROOT", NULL_PTR)); - if (prefix == 0) - prefix = PREFIX; - return prefix; } --- 103,106 ---- *************** *** 236,240 **** { char code = name[0]; ! char *key, *prefix; int keylen; --- 233,237 ---- { char code = name[0]; ! char *key, *prefix = 0; int keylen; *************** *** 258,272 **** if (code == '@') ! { ! prefix = get_key_value (key); ! if (prefix == 0) ! prefix = PREFIX; ! } else ! { ! prefix = getenv (key); ! if (prefix == 0) ! prefix = concat ("$", key, NULL_PTR); ! } /* Remove any trailing directory separator from what we got. */ --- 255,264 ---- if (code == '@') ! prefix = get_key_value (key); else ! prefix = getenv (key); ! ! if (prefix == 0) ! prefix = PREFIX; /* Remove any trailing directory separator from what we got. */ diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/profile.c gcc-2.8.1/profile.c *** gcc-2.8.0/profile.c Wed Dec 3 08:11:30 1997 --- gcc-2.8.1/profile.c Wed Jan 14 20:27:10 1998 *************** *** 1,4 **** /* Calculate branch probabilities, and basic block execution counts. ! Copyright (C) 1990, 91, 92, 93, 94, 96, 1997 Free Software Foundation, Inc. Contributed by James E. Wilson, UC Berkeley/Cygnus Support; based on some ideas from Dain Samples of UC Berkeley. --- 1,4 ---- /* Calculate branch probabilities, and basic block execution counts. ! Copyright (C) 1990, 91-94, 96, 97, 1998 Free Software Foundation, Inc. Contributed by James E. Wilson, UC Berkeley/Cygnus Support; based on some ideas from Dain Samples of UC Berkeley. *************** *** 1634,1638 **** poplevel (1, 0, 1); rest_of_compilation (fndecl); ! fflush (asm_out_file); current_function_decl = NULL_TREE; --- 1634,1639 ---- poplevel (1, 0, 1); rest_of_compilation (fndecl); ! if (! quiet_flag) ! fflush (asm_out_file); current_function_decl = NULL_TREE; diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/protoize.c gcc-2.8.1/protoize.c *** gcc-2.8.0/protoize.c Fri Nov 28 12:30:55 1997 --- gcc-2.8.1/protoize.c Thu Feb 26 07:39:03 1998 *************** *** 1,4 **** /* Protoize program - Original version by Ron Guilmette (rfg@segfault.us.com). ! Copyright (C) 1989, 92-96, 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* Protoize program - Original version by Ron Guilmette (rfg@segfault.us.com). ! Copyright (C) 1989, 92-97, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 118,122 **** --- 118,126 ---- #define my_access(file,flag) access((char *)file, flag) #define my_stat(file,pkt) stat((char *)file, pkt) + #ifdef __MINGW32__ + #define my_link(file1, file2) -1 + #else #define my_link(file1, file2) link((char *)file1, (char *)file2) + #endif #define my_unlink(file) unlink((char *)file) #define my_open(file, mode, flag) open((char *)file, mode, flag) *************** *** 200,206 **** extern int fputs (); extern int fputc (); - #if !defined(_WIN32) - extern int link (); - #endif extern int unlink (); extern int access (); --- 204,207 ---- *************** *** 832,841 **** if (written < 0) { #ifdef EINTR ! if (errno == EINTR) continue; #endif fprintf (stderr, "%s: error writing file `%s': %s\n", ! pname, shortpath (NULL, out_fname), my_strerror(errno)); return; } --- 833,843 ---- if (written < 0) { + int errno_val = errno; #ifdef EINTR ! if (errno_val == EINTR) continue; #endif fprintf (stderr, "%s: error writing file `%s': %s\n", ! pname, shortpath (NULL, out_fname), my_strerror (errno_val)); return; } *************** *** 1528,1533 **** if (my_stat (filename, &stat_buf) == -1) { fprintf (stderr, "%s: %s: can't get status: %s\n", ! pname, shortpath (NULL, filename), my_strerror(errno)); stat_buf.st_mtime = (time_t) -1; } --- 1530,1537 ---- if (my_stat (filename, &stat_buf) == -1) { + int errno_val = errno; fprintf (stderr, "%s: %s: can't get status: %s\n", ! pname, shortpath (NULL, filename), ! my_strerror (errno_val)); stat_buf.st_mtime = (time_t) -1; } *************** *** 2219,2225 **** else { fprintf (stderr, "%s: can't read aux info file `%s': %s\n", pname, shortpath (NULL, aux_info_filename), ! my_strerror(errno)); errors++; return; --- 2223,2230 ---- else { + int errno_val = errno; fprintf (stderr, "%s: can't read aux info file `%s': %s\n", pname, shortpath (NULL, aux_info_filename), ! my_strerror (errno_val)); errors++; return; *************** *** 2247,2253 **** if (my_access (aux_info_filename, R_OK) == -1) { fprintf (stderr, "%s: can't read aux info file `%s': %s\n", pname, shortpath (NULL, aux_info_filename), ! my_strerror(errno)); errors++; return; --- 2252,2259 ---- if (my_access (aux_info_filename, R_OK) == -1) { + int errno_val = errno; fprintf (stderr, "%s: can't read aux info file `%s': %s\n", pname, shortpath (NULL, aux_info_filename), ! my_strerror (errno_val)); errors++; return; *************** *** 2262,2268 **** if (my_stat (aux_info_filename, &stat_buf) == -1) { fprintf (stderr, "%s: can't get status of aux info file `%s': %s\n", pname, shortpath (NULL, aux_info_filename), ! my_strerror(errno)); errors++; return; --- 2268,2275 ---- if (my_stat (aux_info_filename, &stat_buf) == -1) { + int errno_val = errno; fprintf (stderr, "%s: can't get status of aux info file `%s': %s\n", pname, shortpath (NULL, aux_info_filename), ! my_strerror (errno_val)); errors++; return; *************** *** 2289,2295 **** if (my_stat (base_source_filename, &stat_buf) == -1) { fprintf (stderr, "%s: can't get status of aux info file `%s': %s\n", pname, shortpath (NULL, base_source_filename), ! my_strerror(errno)); errors++; return; --- 2296,2303 ---- if (my_stat (base_source_filename, &stat_buf) == -1) { + int errno_val = errno; fprintf (stderr, "%s: can't get status of aux info file `%s': %s\n", pname, shortpath (NULL, base_source_filename), ! my_strerror (errno_val)); errors++; return; *************** *** 2310,2316 **** if ((aux_info_file = my_open (aux_info_filename, O_RDONLY, 0444 )) == -1) { fprintf (stderr, "%s: can't open aux info file `%s' for reading: %s\n", pname, shortpath (NULL, aux_info_filename), ! my_strerror(errno)); return; } --- 2318,2325 ---- if ((aux_info_file = my_open (aux_info_filename, O_RDONLY, 0444 )) == -1) { + int errno_val = errno; fprintf (stderr, "%s: can't open aux info file `%s' for reading: %s\n", pname, shortpath (NULL, aux_info_filename), ! my_strerror (errno_val)); return; } *************** *** 2326,2332 **** if (safe_read (aux_info_file, aux_info_base, aux_info_size) != aux_info_size) { fprintf (stderr, "%s: error reading aux info file `%s': %s\n", pname, shortpath (NULL, aux_info_filename), ! my_strerror(errno)); free (aux_info_base); close (aux_info_file); --- 2335,2342 ---- if (safe_read (aux_info_file, aux_info_base, aux_info_size) != aux_info_size) { + int errno_val = errno; fprintf (stderr, "%s: error reading aux info file `%s': %s\n", pname, shortpath (NULL, aux_info_filename), ! my_strerror (errno_val)); free (aux_info_base); close (aux_info_file); *************** *** 2338,2344 **** if (close (aux_info_file)) { fprintf (stderr, "%s: error closing aux info file `%s': %s\n", pname, shortpath (NULL, aux_info_filename), ! my_strerror(errno)); free (aux_info_base); close (aux_info_file); --- 2348,2355 ---- if (close (aux_info_file)) { + int errno_val = errno; fprintf (stderr, "%s: error closing aux info file `%s': %s\n", pname, shortpath (NULL, aux_info_filename), ! my_strerror (errno_val)); free (aux_info_base); close (aux_info_file); *************** *** 2352,2358 **** if (must_create && !keep_it) if (my_unlink (aux_info_filename) == -1) ! fprintf (stderr, "%s: can't delete aux info file `%s': %s\n", ! pname, shortpath (NULL, aux_info_filename), ! my_strerror(errno)); /* Save a pointer into the first line of the aux_info file which --- 2363,2372 ---- if (must_create && !keep_it) if (my_unlink (aux_info_filename) == -1) ! { ! int errno_val = errno; ! fprintf (stderr, "%s: can't delete aux info file `%s': %s\n", ! pname, shortpath (NULL, aux_info_filename), ! my_strerror (errno_val)); ! } /* Save a pointer into the first line of the aux_info file which *************** *** 2418,2424 **** if (keep_it && my_unlink (aux_info_filename) == -1) { fprintf (stderr, "%s: can't delete file `%s': %s\n", pname, shortpath (NULL, aux_info_filename), ! my_strerror(errno)); return; } --- 2432,2439 ---- if (keep_it && my_unlink (aux_info_filename) == -1) { + int errno_val = errno; fprintf (stderr, "%s: can't delete file `%s': %s\n", pname, shortpath (NULL, aux_info_filename), ! my_strerror (errno_val)); return; } *************** *** 2494,2500 **** if (my_link (filename, new_filename) == -1) { fprintf (stderr, "%s: warning: can't link file `%s' to `%s': %s\n", pname, shortpath (NULL, filename), ! shortpath (NULL, new_filename), my_strerror(errno)); errors++; return; --- 2509,2516 ---- if (my_link (filename, new_filename) == -1) { + int errno_val = errno; fprintf (stderr, "%s: warning: can't link file `%s' to `%s': %s\n", pname, shortpath (NULL, filename), ! shortpath (NULL, new_filename), my_strerror (errno_val)); errors++; return; *************** *** 2503,2508 **** if (my_unlink (filename) == -1) { fprintf (stderr, "%s: warning: can't delete file `%s': %s\n", ! pname, shortpath (NULL, filename), my_strerror(errno)); errors++; return; --- 2519,2525 ---- if (my_unlink (filename) == -1) { + int errno_val = errno; fprintf (stderr, "%s: warning: can't delete file `%s': %s\n", ! pname, shortpath (NULL, filename), my_strerror (errno_val)); errors++; return; *************** *** 4201,4206 **** if (my_stat ((char *)convert_filename, &stat_buf) == -1) { fprintf (stderr, "%s: can't get status for file `%s': %s\n", ! pname, shortpath (NULL, convert_filename), my_strerror(errno)); return; } --- 4218,4225 ---- if (my_stat ((char *)convert_filename, &stat_buf) == -1) { + int errno_val = errno; fprintf (stderr, "%s: can't get status for file `%s': %s\n", ! pname, shortpath (NULL, convert_filename), ! my_strerror (errno_val)); return; } *************** *** 4235,4241 **** if ((input_file = my_open (convert_filename, O_RDONLY, 0444)) == -1) { fprintf (stderr, "%s: can't open file `%s' for reading: %s\n", pname, shortpath (NULL, convert_filename), ! my_strerror(errno)); return; } --- 4254,4261 ---- if ((input_file = my_open (convert_filename, O_RDONLY, 0444)) == -1) { + int errno_val = errno; fprintf (stderr, "%s: can't open file `%s' for reading: %s\n", pname, shortpath (NULL, convert_filename), ! my_strerror (errno_val)); return; } *************** *** 4247,4254 **** if (safe_read (input_file, new_orig_text_base, orig_size) != orig_size) { close (input_file); fprintf (stderr, "\n%s: error reading input file `%s': %s\n", pname, shortpath (NULL, convert_filename), ! my_strerror(errno)); return; } --- 4267,4275 ---- if (safe_read (input_file, new_orig_text_base, orig_size) != orig_size) { + int errno_val = errno; close (input_file); fprintf (stderr, "\n%s: error reading input file `%s': %s\n", pname, shortpath (NULL, convert_filename), ! my_strerror (errno_val)); return; } *************** *** 4281,4287 **** if ((clean_file = creat (clean_filename, 0666)) == -1) { fprintf (stderr, "%s: can't create/open clean file `%s': %s\n", pname, shortpath (NULL, clean_filename), ! my_strerror(errno)); return; } --- 4302,4309 ---- if ((clean_file = creat (clean_filename, 0666)) == -1) { + int errno_val = errno; fprintf (stderr, "%s: can't create/open clean file `%s': %s\n", pname, shortpath (NULL, clean_filename), ! my_strerror (errno_val)); return; } *************** *** 4378,4382 **** if (my_link (convert_filename, new_filename) == -1) { ! if (errno == EEXIST) { if (!quiet_flag) --- 4400,4405 ---- if (my_link (convert_filename, new_filename) == -1) { ! int errno_val = errno; ! if (errno_val == EEXIST) { if (!quiet_flag) *************** *** 4392,4396 **** shortpath (NULL, convert_filename), shortpath (NULL, new_filename), ! my_strerror(errno)); return; } --- 4415,4419 ---- shortpath (NULL, convert_filename), shortpath (NULL, new_filename), ! my_strerror (errno_val)); return; } *************** *** 4400,4405 **** if (my_unlink (convert_filename) == -1) { fprintf (stderr, "%s: can't delete file `%s': %s\n", ! pname, shortpath (NULL, convert_filename), my_strerror(errno)); return; } --- 4423,4430 ---- if (my_unlink (convert_filename) == -1) { + int errno_val = errno; fprintf (stderr, "%s: can't delete file `%s': %s\n", ! pname, shortpath (NULL, convert_filename), ! my_strerror (errno_val)); return; } *************** *** 4412,4418 **** if ((output_file = creat (convert_filename, 0666)) == -1) { fprintf (stderr, "%s: can't create/open output file `%s': %s\n", pname, shortpath (NULL, convert_filename), ! my_strerror(errno)); return; } --- 4437,4444 ---- if ((output_file = creat (convert_filename, 0666)) == -1) { + int errno_val = errno; fprintf (stderr, "%s: can't create/open output file `%s': %s\n", pname, shortpath (NULL, convert_filename), ! my_strerror (errno_val)); return; } *************** *** 4439,4444 **** /* The cast avoids an erroneous warning on AIX. */ if (my_chmod ((char *)convert_filename, stat_buf.st_mode) == -1) ! fprintf (stderr, "%s: can't change mode of file `%s': %s\n", ! pname, shortpath (NULL, convert_filename), my_strerror(errno)); /* Note: We would try to change the owner and group of the output file --- 4465,4474 ---- /* The cast avoids an erroneous warning on AIX. */ if (my_chmod ((char *)convert_filename, stat_buf.st_mode) == -1) ! { ! int errno_val = errno; ! fprintf (stderr, "%s: can't change mode of file `%s': %s\n", ! pname, shortpath (NULL, convert_filename), ! my_strerror (errno_val)); ! } /* Note: We would try to change the owner and group of the output file diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/reg-stack.c gcc-2.8.1/reg-stack.c *** gcc-2.8.0/reg-stack.c Mon Sep 22 16:45:44 1997 --- gcc-2.8.1/reg-stack.c Wed Feb 18 09:54:50 1998 *************** *** 1,4 **** /* Register to Stack convert for GNU compiler. ! Copyright (C) 1992, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* Register to Stack convert for GNU compiler. ! Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 2001,2009 **** cc0_user = next_cc0_user (insn); ! /* If the insn that uses cc0 is a conditional move, then the destination must be the top of stack */ if (GET_CODE (PATTERN (cc0_user)) == SET && SET_DEST (PATTERN (cc0_user)) != pc_rtx ! && GET_CODE (SET_SRC (PATTERN (cc0_user))) == IF_THEN_ELSE) { rtx *dest, src_note; --- 2001,2011 ---- cc0_user = next_cc0_user (insn); ! /* If the insn that uses cc0 is an FP-conditional move, then the destination must be the top of stack */ if (GET_CODE (PATTERN (cc0_user)) == SET && SET_DEST (PATTERN (cc0_user)) != pc_rtx ! && GET_CODE (SET_SRC (PATTERN (cc0_user))) == IF_THEN_ELSE ! && (GET_MODE_CLASS (GET_MODE (SET_DEST (PATTERN (cc0_user)))) ! == MODE_FLOAT)) { rtx *dest, src_note; diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/reload.c gcc-2.8.1/reload.c *** gcc-2.8.0/reload.c Wed Dec 3 08:11:34 1997 --- gcc-2.8.1/reload.c Wed Feb 18 09:21:42 1998 *************** *** 1,4 **** /* Search an insn for pseudo regs that must be in hard regs and are not. ! Copyright (C) 1987, 88, 89, 92-6, 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* Search an insn for pseudo regs that must be in hard regs and are not. ! Copyright (C) 1987, 88, 89, 92-97, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 3140,3153 **** bad = 1; - /* Alternative loses if it requires a type of reload not - permitted for this insn. We can always reload SCRATCH - and objects with a REG_UNUSED note. */ - if (GET_CODE (operand) != SCRATCH - && modified[i] != RELOAD_READ && no_output_reloads - && ! find_reg_note (insn, REG_UNUSED, operand)) - bad = 1; - else if (modified[i] != RELOAD_WRITE && no_input_reloads) - bad = 1; - /* If this is a constant that is reloaded into the desired class by copying it to memory first, count that as another --- 3140,3143 ---- *************** *** 3161,3167 **** /* force_const_mem does not accept HIGH. */ && GET_CODE (operand) != HIGH ! && (PREFERRED_RELOAD_CLASS (operand, (enum reg_class) this_alternative[i]) ! == NO_REGS) && operand_mode[i] != VOIDmode) { --- 3151,3158 ---- /* force_const_mem does not accept HIGH. */ && GET_CODE (operand) != HIGH ! && ((PREFERRED_RELOAD_CLASS (operand, (enum reg_class) this_alternative[i]) ! == NO_REGS) ! || no_input_reloads) && operand_mode[i] != VOIDmode) { *************** *** 3183,3186 **** --- 3174,3189 ---- bad = 1; + /* Alternative loses if it requires a type of reload not + permitted for this insn. We can always reload SCRATCH + and objects with a REG_UNUSED note. */ + else if (GET_CODE (operand) != SCRATCH + && modified[i] != RELOAD_READ && no_output_reloads + && ! find_reg_note (insn, REG_UNUSED, operand)) + bad = 1; + else if (modified[i] != RELOAD_WRITE && no_input_reloads + && ! const_to_mem) + bad = 1; + + /* We prefer to reload pseudos over reloading other things, since such reloads may be able to be eliminated later. *************** *** 3503,3509 **** /* force_const_mem does not accept HIGH. */ && GET_CODE (recog_operand[i]) != HIGH ! && (PREFERRED_RELOAD_CLASS (recog_operand[i], (enum reg_class) goal_alternative[i]) ! == NO_REGS) && operand_mode[i] != VOIDmode) { --- 3506,3513 ---- /* force_const_mem does not accept HIGH. */ && GET_CODE (recog_operand[i]) != HIGH ! && ((PREFERRED_RELOAD_CLASS (recog_operand[i], (enum reg_class) goal_alternative[i]) ! == NO_REGS) ! || no_input_reloads) && operand_mode[i] != VOIDmode) { *************** *** 3847,3855 **** = RELOAD_FOR_OPADDR_ADDR; } ! if (reload_when_needed[i] == RELOAD_FOR_INPADDR_ADDRESS ! || reload_when_needed[i] == RELOAD_FOR_OUTADDR_ADDRESS) ! reload_when_needed[i] = RELOAD_FOR_OPADDR_ADDR; ! else ! reload_when_needed[i] = RELOAD_FOR_OPERAND_ADDRESS; } --- 3851,3856 ---- = RELOAD_FOR_OPADDR_ADDR; } ! ! reload_when_needed[i] = RELOAD_FOR_OPERAND_ADDRESS; } *************** *** 6190,6199 **** if (reload_secondary_in_icode[r] != CODE_FOR_nothing) { ! fprintf (stderr, "%ssecondary_in_icode = %s", prefix, insn_name[r]); prefix = ", "; } if (reload_secondary_out_icode[r] != CODE_FOR_nothing) ! fprintf (stderr, "%ssecondary_out_icode = %s", prefix, insn_name[r]); fprintf (stderr, "\n"); --- 6191,6202 ---- if (reload_secondary_in_icode[r] != CODE_FOR_nothing) { ! fprintf (stderr, "%ssecondary_in_icode = %s", prefix, ! insn_name[reload_secondary_in_icode[r]]); prefix = ", "; } if (reload_secondary_out_icode[r] != CODE_FOR_nothing) ! fprintf (stderr, "%ssecondary_out_icode = %s", prefix, ! insn_name[reload_secondary_out_icode[r]]); fprintf (stderr, "\n"); diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/reorg.c gcc-2.8.1/reorg.c *** gcc-2.8.0/reorg.c Wed Dec 3 08:45:06 1997 --- gcc-2.8.1/reorg.c Thu Feb 26 07:39:04 1998 *************** *** 1,4 **** /* Perform instruction reorganizations for delay slot filling. ! Copyright (C) 1992, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu). Hacked by Michael Tiemann (tiemann@cygnus.com). --- 1,4 ---- /* Perform instruction reorganizations for delay slot filling. ! Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu). Hacked by Michael Tiemann (tiemann@cygnus.com). *************** *** 267,271 **** static void fill_simple_delay_slots PROTO((rtx, int)); static rtx fill_slots_from_thread PROTO((rtx, rtx, rtx, rtx, int, int, ! int, int, int, int *)); static void fill_eager_delay_slots PROTO((rtx)); static void relax_delay_slots PROTO((rtx)); --- 267,271 ---- static void fill_simple_delay_slots PROTO((rtx, int)); static rtx fill_slots_from_thread PROTO((rtx, rtx, rtx, rtx, int, int, ! int, int, int, int *, rtx)); static void fill_eager_delay_slots PROTO((rtx)); static void relax_delay_slots PROTO((rtx)); *************** *** 275,279 **** /* Given X, some rtl, and RES, a pointer to a `struct resource', mark ! which resources are references by the insn. If INCLUDE_CALLED_ROUTINE is TRUE, resources used by the called routine will be included for CALL_INSNs. */ --- 275,279 ---- /* Given X, some rtl, and RES, a pointer to a `struct resource', mark ! which resources are references by the insn. If INCLUDE_DELAYED_EFFECTS is TRUE, resources used by the called routine will be included for CALL_INSNs. */ *************** *** 488,494 **** } ! /* Given X, a part of an insn, and a pointer to a `struct resource', RES, ! indicate which resources are modified by the insn. If INCLUDE_CALLED_ROUTINE ! is nonzero, also mark resources potentially set by the called routine. If IN_DEST is nonzero, it means we are inside a SET. Otherwise, --- 488,495 ---- } ! /* Given X, a part of an insn, and a pointer to a `struct resource', ! RES, indicate which resources are modified by the insn. If ! INCLUDE_DELAYED_EFFECTS is nonzero, also mark resources potentially ! set by the called routine. If IN_DEST is nonzero, it means we are inside a SET. Otherwise, *************** *** 741,745 **** /* Return TRUE if any resource marked in RES, a `struct resources', is ! referenced by INSN. If INCLUDE_CALLED_ROUTINE is set, return if the called routine is using those resources. --- 742,746 ---- /* Return TRUE if any resource marked in RES, a `struct resources', is ! referenced by INSN. If INCLUDE_DELAYED_EFFECTS is set, return if the called routine is using those resources. *************** *** 763,767 **** /* Return TRUE if INSN modifies resources that are marked in RES. ! INCLUDE_CALLED_ROUTINE is set if the actions of that routine should be included. CC0 is only modified if it is explicitly set; see comments in front of mark_set_resources for details. */ --- 764,768 ---- /* Return TRUE if INSN modifies resources that are marked in RES. ! INCLUDE_DELAYED_EFFECTS is set if the actions of that routine should be included. CC0 is only modified if it is explicitly set; see comments in front of mark_set_resources for details. */ *************** *** 3323,3327 **** own_thread_p (JUMP_LABEL (insn), JUMP_LABEL (insn), 0), ! 0, slots_to_fill, &slots_filled); if (delay_list) --- 3324,3329 ---- own_thread_p (JUMP_LABEL (insn), JUMP_LABEL (insn), 0), ! 0, slots_to_fill, &slots_filled, ! delay_list); if (delay_list) *************** *** 3453,3457 **** fill_slots_from_thread (insn, condition, thread, opposite_thread, likely, thread_if_true, own_thread, own_opposite_thread, ! slots_to_fill, pslots_filled) rtx insn; rtx condition; --- 3455,3459 ---- fill_slots_from_thread (insn, condition, thread, opposite_thread, likely, thread_if_true, own_thread, own_opposite_thread, ! slots_to_fill, pslots_filled, delay_list) rtx insn; rtx condition; *************** *** 3461,3467 **** int own_thread, own_opposite_thread; int slots_to_fill, *pslots_filled; { rtx new_thread; - rtx delay_list = 0; struct resources opposite_needed, set, needed; rtx trial; --- 3463,3469 ---- int own_thread, own_opposite_thread; int slots_to_fill, *pslots_filled; + rtx delay_list; { rtx new_thread; struct resources opposite_needed, set, needed; rtx trial; *************** *** 3480,3484 **** insns from that. */ if (thread == 0) ! return 0; /* If this is an unconditional branch, nothing is needed at the --- 3482,3486 ---- insns from that. */ if (thread == 0) ! return delay_list; /* If this is an unconditional branch, nothing is needed at the *************** *** 3637,3640 **** --- 3639,3644 ---- delay_list = add_to_delay_list (temp, delay_list); + mark_set_resources (trial, &opposite_needed, 0, 1); + if (slots_to_fill == ++(*pslots_filled)) { *************** *** 3706,3710 **** /* If this is the `true' thread, we will want to follow the jump, so we can only do this if we have taken everything up to here. */ ! if (thread_if_true && trial == new_thread) delay_list = steal_delay_list_from_target (insn, condition, PATTERN (trial), --- 3710,3716 ---- /* If this is the `true' thread, we will want to follow the jump, so we can only do this if we have taken everything up to here. */ ! if (thread_if_true && trial == new_thread ! && ! insn_references_resource_p (XVECEXP (PATTERN (trial), 0, 0), ! &opposite_needed, 0)) delay_list = steal_delay_list_from_target (insn, condition, PATTERN (trial), *************** *** 3906,3910 **** fallthrough_insn, prediction == 2, 1, own_target, own_fallthrough, ! slots_to_fill, &slots_filled); if (delay_list == 0 && own_fallthrough) --- 3912,3917 ---- fallthrough_insn, prediction == 2, 1, own_target, own_fallthrough, ! slots_to_fill, &slots_filled, ! delay_list); if (delay_list == 0 && own_fallthrough) *************** *** 3921,3925 **** insn_at_target, 0, 0, own_fallthrough, own_target, ! slots_to_fill, &slots_filled); } } --- 3928,3933 ---- insn_at_target, 0, 0, own_fallthrough, own_target, ! slots_to_fill, &slots_filled, ! delay_list); } } *************** *** 3931,3935 **** insn_at_target, 0, 0, own_fallthrough, own_target, ! slots_to_fill, &slots_filled); if (delay_list == 0) --- 3939,3944 ---- insn_at_target, 0, 0, own_fallthrough, own_target, ! slots_to_fill, &slots_filled, ! delay_list); if (delay_list == 0) *************** *** 3938,3942 **** next_active_insn (insn), 0, 1, own_target, own_fallthrough, ! slots_to_fill, &slots_filled); } --- 3947,3952 ---- next_active_insn (insn), 0, 1, own_target, own_fallthrough, ! slots_to_fill, &slots_filled, ! delay_list); } diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/rtl.h gcc-2.8.1/rtl.h *** gcc-2.8.0/rtl.h Thu Nov 27 16:22:12 1997 --- gcc-2.8.1/rtl.h Fri Feb 6 19:38:46 1998 *************** *** 1,4 **** /* Register Transfer Language (RTL) definitions for GNU C-Compiler ! Copyright (C) 1987, 91-96, 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* Register Transfer Language (RTL) definitions for GNU C-Compiler ! Copyright (C) 1987, 91-97, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 734,741 **** extern int get_pool_offset PROTO((rtx)); extern rtx simplify_subtraction PROTO((rtx)); ! extern rtx assign_stack_local PROTO((enum machine_mode, int, int)); ! extern rtx assign_stack_temp PROTO((enum machine_mode, int, int)); ! extern rtx assign_temp PROTO((union tree_node *, int, ! int, int)); extern rtx protect_from_queue PROTO((rtx, int)); extern void emit_queue PROTO((void)); --- 734,743 ---- extern int get_pool_offset PROTO((rtx)); extern rtx simplify_subtraction PROTO((rtx)); ! extern rtx assign_stack_local PROTO((enum machine_mode, ! HOST_WIDE_INT, int)); ! extern rtx assign_stack_temp PROTO((enum machine_mode, ! HOST_WIDE_INT, int)); ! extern rtx assign_temp PROTO((union tree_node *, ! int, int, int)); extern rtx protect_from_queue PROTO((rtx, int)); extern void emit_queue PROTO((void)); diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/rtl.texi gcc-2.8.1/rtl.texi *** gcc-2.8.0/rtl.texi Wed Aug 6 15:57:48 1997 --- gcc-2.8.1/rtl.texi Sat Feb 28 15:58:21 1998 *************** *** 1,3 **** ! @c Copyright (C) 1988, 1989, 1992, 1994, 1997 Free Software Foundation, Inc. @c This is part of the GCC manual. @c For copying conditions, see the file gcc.texi. --- 1,3 ---- ! @c Copyright (C) 1988, 89, 92, 94, 97, 1998 Free Software Foundation, Inc. @c This is part of the GCC manual. @c For copying conditions, see the file gcc.texi. *************** *** 428,435 **** In an @code{insn} in a delay slot of a branch, indicates that the insn is from the target of the branch. If the branch insn has ! @code{INSN_ANNULLED_BRANCH_P} set, this insn should only be executed if ! the branch is taken. For annulled branches with this bit clear, the ! insn should be executed only if the branch is not taken. Stored in the ! @code{in_struct} field and printed as @samp{/s}. @findex CONSTANT_POOL_ADDRESS_P --- 428,437 ---- In an @code{insn} in a delay slot of a branch, indicates that the insn is from the target of the branch. If the branch insn has ! @code{INSN_ANNULLED_BRANCH_P} set, this insn will only be executed if ! the branch is taken. For annulled branches with ! @code{INSN_FROM_TARGET_P} clear, the insn will be executed only if the ! branch is not taken. When @code{INSN_ANNULLED_BRANCH_P} is not set, ! this insn will always be executed. Stored in the @code{in_struct} ! field and printed as @samp{/s}. @findex CONSTANT_POOL_ADDRESS_P diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/rtlanal.c gcc-2.8.1/rtlanal.c *** gcc-2.8.0/rtlanal.c Mon Sep 22 19:26:19 1997 --- gcc-2.8.1/rtlanal.c Fri Feb 6 15:17:50 1998 *************** *** 1,4 **** /* Analyze RTL for C-Compiler ! Copyright (C) 1987, 88, 92-96, 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* Analyze RTL for C-Compiler ! Copyright (C) 1987, 88, 92-97, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 104,108 **** for pseudos. */ return ! (x == frame_pointer_rtx || x == hard_frame_pointer_rtx ! || x == arg_pointer_rtx); case LO_SUM: --- 104,108 ---- for pseudos. */ return ! (x == frame_pointer_rtx || x == hard_frame_pointer_rtx ! || x == arg_pointer_rtx || x == pic_offset_table_rtx); case LO_SUM: *************** *** 1158,1174 **** rtx link; ! /* See if there is a death note for something that includes TEST_REGNO. */ ! for (link = REG_NOTES (insn); link; link = XEXP (link, 1)) { ! if (REG_NOTE_KIND (link) != REG_DEAD || GET_CODE (XEXP (link, 0)) != REG) ! continue; ! ! regno = REGNO (XEXP (link, 0)); ! endregno = (regno >= FIRST_PSEUDO_REGISTER ? regno + 1 ! : regno + HARD_REGNO_NREGS (regno, ! GET_MODE (XEXP (link, 0)))); ! if (test_regno >= regno && test_regno < endregno) ! return 1; } --- 1158,1185 ---- rtx link; ! /* REG_READ notes are not normally maintained after reload, so we ! ignore them if the are invalid. */ ! if (! reload_completed ! #ifdef PRESERVE_DEATH_INFO_REGNO_P ! || PRESERVE_DEATH_INFO_REGNO_P (test_regno) ! #endif ! ) { ! /* See if there is a death note for something that includes ! TEST_REGNO. */ ! for (link = REG_NOTES (insn); link; link = XEXP (link, 1)) ! { ! if (REG_NOTE_KIND (link) != REG_DEAD ! || GET_CODE (XEXP (link, 0)) != REG) ! continue; ! ! regno = REGNO (XEXP (link, 0)); ! endregno = (regno >= FIRST_PSEUDO_REGISTER ? regno + 1 ! : regno + HARD_REGNO_NREGS (regno, ! GET_MODE (XEXP (link, 0)))); ! if (test_regno >= regno && test_regno < endregno) ! return 1; ! } } diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/sched.c gcc-2.8.1/sched.c *** gcc-2.8.0/sched.c Fri Dec 12 17:58:23 1997 --- gcc-2.8.1/sched.c Sat Feb 14 08:25:30 1998 *************** *** 1,4 **** /* Instruction scheduling pass. ! Copyright (C) 1992, 93-96, 1997 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) Enhanced by, and currently maintained by, Jim Wilson (wilson@cygnus.com) --- 1,4 ---- /* Instruction scheduling pass. ! Copyright (C) 1992, 93-97, 1998 Free Software Foundation, Inc. Contributed by Michael Tiemann (tiemann@cygnus.com) Enhanced by, and currently maintained by, Jim Wilson (wilson@cygnus.com) *************** *** 2893,2902 **** && regno != STACK_POINTER_REGNUM) { ! /* ??? It is perhaps a dead_or_set_p bug that it does ! not check for REG_UNUSED notes itself. This is necessary ! for the case where the SET_DEST is a subreg of regno, as ! dead_or_set_p handles subregs specially. */ ! if (! all_needed && ! dead_or_set_p (insn, x) ! && ! find_reg_note (insn, REG_UNUSED, x)) { /* Check for the case where the register dying partially --- 2893,2897 ---- && regno != STACK_POINTER_REGNUM) { ! if (! all_needed && ! dead_or_set_p (insn, x)) { /* Check for the case where the register dying partially *************** *** 2957,2971 **** case SUBREG: case STRICT_LOW_PART: ! /* These two cases preserve the value of SET_P, so handle them ! separately. */ ! attach_deaths (XEXP (x, 0), insn, set_p); return; case ZERO_EXTRACT: case SIGN_EXTRACT: ! /* This case preserves the value of SET_P for the first operand, but ! clears it for the other two. */ ! attach_deaths (XEXP (x, 0), insn, set_p); attach_deaths (XEXP (x, 1), insn, 0); attach_deaths (XEXP (x, 2), insn, 0); --- 2952,2969 ---- case SUBREG: + attach_deaths (SUBREG_REG (x), insn, + set_p && ((GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))) + <= UNITS_PER_WORD) + || (GET_MODE_SIZE (GET_MODE (SUBREG_REG (x))) + == GET_MODE_SIZE (GET_MODE ((x)))))); + return; + case STRICT_LOW_PART: ! attach_deaths (XEXP (x, 0), insn, 0); return; case ZERO_EXTRACT: case SIGN_EXTRACT: ! attach_deaths (XEXP (x, 0), insn, 0); attach_deaths (XEXP (x, 1), insn, 0); attach_deaths (XEXP (x, 2), insn, 0); diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/sdbout.c gcc-2.8.1/sdbout.c *** gcc-2.8.0/sdbout.c Mon Dec 22 19:30:17 1997 --- gcc-2.8.1/sdbout.c Sat Feb 28 15:58:21 1998 *************** *** 1,4 **** /* Output sdb-format symbol table information from GNU compiler. ! Copyright (C) 1988, 92, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* Output sdb-format symbol table information from GNU compiler. ! Copyright (C) 1988, 92-97, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 575,578 **** --- 575,581 ---- if (precision == LONG_DOUBLE_TYPE_SIZE) return T_LNGDBL; + #else + if (precision == LONG_DOUBLE_TYPE_SIZE) + return T_DOUBLE; /* better than nothing */ #endif return 0; *************** *** 1063,1068 **** { tree tail; for (tail = TYPE_FIELDS (type); tail; tail = TREE_CHAIN (tail)) ! if (TREE_CODE (TREE_TYPE (tail)) == POINTER_TYPE) sdbout_one_type (TREE_TYPE (TREE_TYPE (tail))); else --- 1066,1072 ---- { tree tail; + for (tail = TYPE_FIELDS (type); tail; tail = TREE_CHAIN (tail)) ! if (POINTER_TYPE_P (TREE_TYPE (tail))) sdbout_one_type (TREE_TYPE (TREE_TYPE (tail))); else diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/stab.def gcc-2.8.1/stab.def *** gcc-2.8.0/stab.def Tue Feb 21 15:09:47 1995 --- gcc-2.8.1/stab.def Sun Feb 8 08:50:40 1998 *************** *** 1,18 **** /* Table of DBX symbol codes for the GNU system. ! Copyright (C) 1988 Free Software Foundation, Inc. ! This program is free software; you can redistribute it and/or modify ! it under the terms of the GNU General Public License as published by ! the Free Software Foundation; either version 1, or (at your option) ! any later version. ! This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ! GNU General Public License for more details. ! You should have received a copy of the GNU General Public License ! along with this program; if not, write to the Free Software ! Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ /* This contains contribution from Cygnus Support. */ --- 1,20 ---- /* Table of DBX symbol codes for the GNU system. ! Copyright (C) 1988, 1997 Free Software Foundation, Inc. ! This file is part of the GNU C Library. ! The GNU C Library is free software; you can redistribute it and/or ! modify it under the terms of the GNU Library General Public License as ! published by the Free Software Foundation; either version 2 of the ! License, or (at your option) any later version. ! The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of ! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ! Library General Public License for more details. ! You should have received a copy of the GNU Library General Public ! License along with the GNU C Library; see the file COPYING.LIB. If not, ! write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ! Boston, MA 02111-1307, USA. */ /* This contains contribution from Cygnus Support. */ diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/stmt.c gcc-2.8.1/stmt.c *** gcc-2.8.0/stmt.c Wed Dec 31 18:39:53 1997 --- gcc-2.8.1/stmt.c Sat Feb 28 21:00:00 1998 *************** *** 1,4 **** /* Expands front end tree to back end RTL for GNU C-Compiler ! Copyright (C) 1987, 88, 89, 92-6, 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* Expands front end tree to back end RTL for GNU C-Compiler ! Copyright (C) 1987, 88, 89, 92-97, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 1422,1425 **** --- 1422,1429 ---- rtx insn; + /* An ASM with no outputs needs to be treated as volatile, for now. */ + if (noutputs == 0) + vol = 1; + if (output_bytecode) { *************** *** 1567,1573 **** filename, line); ! /* The only use of BODY is if no outputs are specified, so set ! it volatile, at least for now. */ ! MEM_VOLATILE_P (body) = 1; /* Eval the inputs and put them into ARGVEC. --- 1571,1575 ---- filename, line); ! MEM_VOLATILE_P (body) = vol; /* Eval the inputs and put them into ARGVEC. *************** *** 3135,3142 **** if (!output_bytecode) ! { ! /* Make a new level for allocating stack slots. */ ! push_temp_slots (); ! } } --- 3137,3142 ---- if (!output_bytecode) ! /* Make a new level for allocating stack slots. */ ! push_temp_slots_for_block (); } *************** *** 3600,3604 **** && ! TREE_THIS_VOLATILE (decl) && ! TREE_ADDRESSABLE (decl) ! && (DECL_REGISTER (decl) || ! obey_regdecls)) { /* Automatic variable that can go in a register. */ --- 3600,3606 ---- && ! TREE_THIS_VOLATILE (decl) && ! TREE_ADDRESSABLE (decl) ! && (DECL_REGISTER (decl) || ! obey_regdecls) ! /* if -fcheck-memory-usage, check all variables. */ ! && ! flag_check_memory_usage) { /* Automatic variable that can go in a register. */ *************** *** 3610,3614 **** mark_user_reg (DECL_RTL (decl)); ! if (TREE_CODE (type) == POINTER_TYPE) mark_reg_pointer (DECL_RTL (decl), (TYPE_ALIGN (TREE_TYPE (TREE_TYPE (decl))) --- 3612,3616 ---- mark_user_reg (DECL_RTL (decl)); ! if (POINTER_TYPE_P (type)) mark_reg_pointer (DECL_RTL (decl), (TYPE_ALIGN (TREE_TYPE (TREE_TYPE (decl))) *************** *** 3814,3819 **** { enum tree_code code = TREE_CODE (TREE_TYPE (decl)); if (code == INTEGER_TYPE || code == REAL_TYPE || code == ENUMERAL_TYPE ! || code == POINTER_TYPE) expand_assignment (decl, convert (TREE_TYPE (decl), integer_zero_node), 0, 0); --- 3816,3822 ---- { enum tree_code code = TREE_CODE (TREE_TYPE (decl)); + if (code == INTEGER_TYPE || code == REAL_TYPE || code == ENUMERAL_TYPE ! || code == POINTER_TYPE || code == REFERENCE_TYPE) expand_assignment (decl, convert (TREE_TYPE (decl), integer_zero_node), 0, 0); *************** *** 3897,3902 **** if (code == INTEGER_TYPE || code == REAL_TYPE || code == ENUMERAL_TYPE ! || code == POINTER_TYPE) ! expand_assignment (TREE_TYPE (decl), decl, 0, 0); } --- 3900,3904 ---- if (code == INTEGER_TYPE || code == REAL_TYPE || code == ENUMERAL_TYPE ! || code == POINTER_TYPE || code == REFERENCE_TYPE) expand_assignment (TREE_TYPE (decl), decl, 0, 0); } *************** *** 4241,4245 **** --- 4243,4256 ---- times, the control paths are non-overlapping so the cleanups will not be executed twice. */ + + /* We may need to protect fixups with rethrow regions. */ + int protect = (in_fixup && ! TREE_ADDRESSABLE (tail)); + + if (protect) + expand_fixup_region_start (); + expand_expr (TREE_VALUE (tail), const0_rtx, VOIDmode, 0); + if (protect) + expand_fixup_region_end (TREE_VALUE (tail)); free_temp_slots (); } diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/texinfo.tex gcc-2.8.1/texinfo.tex *** gcc-2.8.0/texinfo.tex Wed Dec 24 13:59:13 1997 --- gcc-2.8.1/texinfo.tex Sat Feb 28 21:01:06 1998 *************** *** 1,31 **** ! %% TeX macros to handle Texinfo files. ! %% $Id: texinfo.tex,v 2.221 1997/12/24 18:59:06 karl Exp $ ! ! % Copyright (C) 1985, 86, 88, 90, 91, 92, 93, ! % 94, 95, 96, 97 Free Software Foundation, Inc. ! ! %This texinfo.tex file is free software; you can redistribute it and/or ! %modify it under the terms of the GNU General Public License as ! %published by the Free Software Foundation; either version 2, or (at ! %your option) any later version. ! ! %This texinfo.tex file is distributed in the hope that it will be ! %useful, but WITHOUT ANY WARRANTY; without even the implied warranty ! %of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ! %General Public License for more details. ! ! %You should have received a copy of the GNU General Public License ! %along with this texinfo.tex file; see the file COPYING. If not, write ! %to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ! %Boston, MA 02111-1307, USA. ! ! ! %In other words, you are welcome to use, share and improve this program. ! %You are forbidden to forbid anyone else to use, share and improve ! %what you give them. Help stamp out software-hoarding! ! ! ! % Send bug reports to bug-texinfo@prep.ai.mit.edu. ! % Please include a *precise* test case in each bug report. --- 1,39 ---- ! % texinfo.tex -- TeX macros to handle Texinfo files. ! % $Id: texinfo.tex,v 2.227 1998/02/25 22:54:34 karl Exp $ ! % ! % Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98 ! % Free Software Foundation, Inc. ! % ! % This texinfo.tex file is free software; you can redistribute it and/or ! % modify it under the terms of the GNU General Public License as ! % published by the Free Software Foundation; either version 2, or (at ! % your option) any later version. ! % ! % This texinfo.tex file is distributed in the hope that it will be ! % useful, but WITHOUT ANY WARRANTY; without even the implied warranty ! % of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ! % General Public License for more details. ! % ! % You should have received a copy of the GNU General Public License ! % along with this texinfo.tex file; see the file COPYING. If not, write ! % to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, ! % Boston, MA 02111-1307, USA. ! % ! % In other words, you are welcome to use, share and improve this program. ! % You are forbidden to forbid anyone else to use, share and improve ! % what you give them. Help stamp out software-hoarding! ! % ! % Please try the latest version of texinfo.tex before submitting bug ! % reports; you can get the latest version from: ! % ftp://ftp.cs.umb.edu/pub/tex/texinfo.tex ! % /home/gd/gnu/doc/texinfo.tex on the GNU machines. ! % ! % Send bug reports to bug-texinfo@gnu.org. ! % Please include a precise test case in each bug report, ! % including a complete document with which we can reproduce the problem. ! % ! % Texinfo macros (with @macro) are *not* supported by texinfo.tex. You ! % have to run makeinfo -E to expand macros first; the texi2dvi script ! % does this. *************** *** 37,41 **** % This automatically updates the version number based on RCS. \def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}} ! \deftexinfoversion$Revision: 2.221 $ \message{Loading texinfo package [Version \texinfoversion]:} --- 45,49 ---- % This automatically updates the version number based on RCS. \def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}} ! \deftexinfoversion$Revision: 2.227 $ \message{Loading texinfo package [Version \texinfoversion]:} *************** *** 55,59 **** \let\ptexdots=\dots \let\ptexend=\end ! \let\ptexequiv = \equiv \let\ptexi=\i \let\ptexlbrace=\{ --- 63,68 ---- \let\ptexdots=\dots \let\ptexend=\end ! \let\ptexequiv=\equiv ! \let\ptexexclam=\! \let\ptexi=\i \let\ptexlbrace=\{ *************** *** 1279,1282 **** --- 1288,1295 ---- \textfonts + % Define these so they can be easily changed for other fonts. + \def\angleleft{$\langle$} + \def\angleright{$\rangle$} + % Count depth in font-changes, for error checks \newcount\fontdepth \fontdepth=0 *************** *** 1316,1328 **** } \let\ttfont=\t ! \def\samp #1{`\tclose{#1}'\null} \setfont\smallrm\rmshape{8}{1000} \font\smallsy=cmsy9 \def\key#1{{\smallrm\textfont2=\smallsy \leavevmode\hbox{% ! \raise0.4pt\hbox{$\langle$}\kern-.08em\vtop{% \vbox{\hrule\kern-0.4pt ! \hbox{\raise0.4pt\hbox{\vphantom{$\langle$}}#1}}% \kern-0.4pt\hrule}% ! \kern-.06em\raise0.4pt\hbox{$\rangle$}}}} % The old definition, with no lozenge: %\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} --- 1329,1341 ---- } \let\ttfont=\t ! \def\samp#1{`\tclose{#1}'\null} \setfont\smallrm\rmshape{8}{1000} \font\smallsy=cmsy9 \def\key#1{{\smallrm\textfont2=\smallsy \leavevmode\hbox{% ! \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% \vbox{\hrule\kern-0.4pt ! \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% \kern-0.4pt\hrule}% ! \kern-.06em\raise0.4pt\hbox{\angleright}}}} % The old definition, with no lozenge: %\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} *************** *** 1437,1441 **** % rms does not like the angle brackets --karl, 17may97. % So now @email is just like @uref. ! %\def\email#1{$\langle${\tt #1}$\rangle$} \let\email=\uref --- 1450,1454 ---- % rms does not like the angle brackets --karl, 17may97. % So now @email is just like @uref. ! %\def\email#1{\angleleft{\tt #1}\angleright} \let\email=\uref *************** *** 2059,2066 **** % to baseline. % 0pt means it depends on current normal line spacing. ! ! %%%% ! % Dimensions ! \newskip\multitableparskip \newskip\multitableparindent --- 2072,2076 ---- % to baseline. % 0pt means it depends on current normal line spacing. ! % \newskip\multitableparskip \newskip\multitableparindent *************** *** 2072,2077 **** \multitablelinespace=0pt - %%%% % Macros used to set up halign preamble: \let\endsetuptable\relax \def\xendsetuptable{\endsetuptable} --- 2082,2087 ---- \multitablelinespace=0pt % Macros used to set up halign preamble: + % \let\endsetuptable\relax \def\xendsetuptable{\endsetuptable} *************** *** 2080,2084 **** \newif\ifsetpercent ! %% 2/1/96, to allow fractions to be given with more than one digit. \def\pickupwholefraction#1 {\global\advance\colcount by1 % \expandafter\xdef\csname col\the\colcount\endcsname{.#1\hsize}% --- 2090,2094 ---- \newif\ifsetpercent ! % 2/1/96, to allow fractions to be given with more than one digit. \def\pickupwholefraction#1 {\global\advance\colcount by1 % \expandafter\xdef\csname col\the\colcount\endcsname{.#1\hsize}% *************** *** 2106,2110 **** \fi\go} - %%%% % multitable syntax \def\tab{&\hskip1sp\relax} % 2/2/96 --- 2116,2119 ---- *************** *** 2112,2183 **** % maintained, even if it is never used. - - %%%% % @multitable ... @end multitable definitions: \def\multitable{\parsearg\dotable} - \def\dotable#1{\bgroup ! \let\item\cr ! \tolerance=9500 ! \hbadness=9500 ! \setmultitablespacing ! \parskip=\multitableparskip ! \parindent=\multitableparindent ! \overfullrule=0pt ! \global\colcount=0\relax% ! \def\Emultitable{\global\setpercentfalse\global\everycr{}\cr\egroup\egroup}% ! % To parse everything between @multitable and @item : ! \setuptable#1 \endsetuptable ! % Need to reset this to 0 after \setuptable. ! \global\colcount=0\relax% ! % ! % This preamble sets up a generic column definition, which will ! % be used as many times as user calls for columns. ! % \vtop will set a single line and will also let text wrap and ! % continue for many paragraphs if desired. ! \halign\bgroup&\global\advance\colcount by 1\relax% ! \multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname ! % In order to keep entries from bumping into each other ! % we will add a \leftskip of \multitablecolspace to all columns after ! % the first one. ! % If a template has been used, we will add \multitablecolspace ! % to the width of each template entry. ! % If user has set preamble in terms of percent of \hsize ! % we will use that dimension as the width of the column, and ! % the \leftskip will keep entries from bumping into each other. ! % Table will start at left margin and final column will justify at ! % right margin. ! \ifnum\colcount=1 ! \else ! \ifsetpercent \else ! % If user has set preamble in terms of percent of \hsize ! % we will advance \hsize by \multitablecolspace ! \advance\hsize by \multitablecolspace \fi ! % In either case we will make \leftskip=\multitablecolspace: ! \leftskip=\multitablecolspace ! \fi ! % Ignoring space at the beginning and end avoids an occasional spurious ! % blank line, when TeX decides to break the line at the space before the ! % box from the multistrut, so the strut ends up on a line by itself. ! % For example: ! % @multitable @columnfractions .11 .89 ! % @item @code{#} ! % @tab Legal holiday which is valid in major parts of the whole country. ! % Is automatically provided with highlighting sequences respectively marking ! % characters. ! \noindent\ignorespaces##\unskip\multistrut}\cr ! % \everycr will reset column counter, \colcount, at the end of ! % each line. Every column entry will cause \colcount to advance by one. ! % The table preamble ! % looks at the current \colcount to find the correct column width. ! \global\everycr{\noalign{% ! % \filbreak%% keeps underfull box messages off when table breaks over pages. ! % Maybe so, but it also creates really weird page breaks when the table ! % breaks over pages Wouldn't \vfil be better? Wait until the problem ! % manifests itself, so it can be fixed for real --karl. ! \global\colcount=0\relax}} } --- 2121,2197 ---- % maintained, even if it is never used. % @multitable ... @end multitable definitions: \def\multitable{\parsearg\dotable} \def\dotable#1{\bgroup ! \vskip\parskip ! \let\item\crcr ! \tolerance=9500 ! \hbadness=9500 ! \setmultitablespacing ! \parskip=\multitableparskip ! \parindent=\multitableparindent ! \overfullrule=0pt ! \global\colcount=0 ! \def\Emultitable{\global\setpercentfalse\cr\egroup\egroup}% ! % ! % To parse everything between @multitable and @item: ! \setuptable#1 \endsetuptable ! % ! % \everycr will reset column counter, \colcount, at the end of ! % each line. Every column entry will cause \colcount to advance by one. ! % The table preamble ! % looks at the current \colcount to find the correct column width. ! \everycr{\noalign{% ! % ! % \filbreak%% keeps underfull box messages off when table breaks over pages. ! % Maybe so, but it also creates really weird page breaks when the table ! % breaks over pages. Wouldn't \vfil be better? Wait until the problem ! % manifests itself, so it can be fixed for real --karl. ! \global\colcount=0\relax}}% ! % ! % This preamble sets up a generic column definition, which will ! % be used as many times as user calls for columns. ! % \vtop will set a single line and will also let text wrap and ! % continue for many paragraphs if desired. ! \halign\bgroup&\global\advance\colcount by 1\relax ! \multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname ! % ! % In order to keep entries from bumping into each other ! % we will add a \leftskip of \multitablecolspace to all columns after ! % the first one. ! % ! % If a template has been used, we will add \multitablecolspace ! % to the width of each template entry. ! % ! % If the user has set preamble in terms of percent of \hsize we will ! % use that dimension as the width of the column, and the \leftskip ! % will keep entries from bumping into each other. Table will start at ! % left margin and final column will justify at right margin. ! % ! % Make sure we don't inherit \rightskip from the outer environment. ! \rightskip=0pt ! \ifnum\colcount=1 ! % The first column will be indented with the surrounding text. ! \advance\hsize by\leftskip \else ! \ifsetpercent \else ! % If user has not set preamble in terms of percent of \hsize ! % we will advance \hsize by \multitablecolspace. ! \advance\hsize by \multitablecolspace ! \fi ! % In either case we will make \leftskip=\multitablecolspace: ! \leftskip=\multitablecolspace \fi ! % Ignoring space at the beginning and end avoids an occasional spurious ! % blank line, when TeX decides to break the line at the space before the ! % box from the multistrut, so the strut ends up on a line by itself. ! % For example: ! % @multitable @columnfractions .11 .89 ! % @item @code{#} ! % @tab Legal holiday which is valid in major parts of the whole country. ! % Is automatically provided with highlighting sequences respectively marking ! % characters. ! \noindent\ignorespaces##\unskip\multistrut}\cr } *************** *** 2526,2529 **** --- 2540,2548 ---- % % See if the index file exists and is nonempty. + % Change catcode of @ here so that if the index file contains + % \initial {@} + % as its first line, TeX doesn't complain about mismatched braces + % (because it thinks @} is a control sequence). + \catcode`\@ = 11 \openin 1 \jobname.#1s \ifeof 1 *************** *** 2547,2551 **** \def\indexbackslash{\rawbackslashxx}% \catcode`\\ = 0 - \catcode`\@ = 11 \escapechar = `\\ \begindoublecolumns --- 2566,2569 ---- *************** *** 3443,3451 **** % can't do that in the \entry macro, since index entries might consist % of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.) - % - % \turnoffactive is for the sake of @" used for umlauts. \def\tocentry#1#2{\begingroup \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks ! \entry{\turnoffactive #1}{\turnoffactive #2}% \endgroup} --- 3461,3470 ---- % can't do that in the \entry macro, since index entries might consist % of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.) \def\tocentry#1#2{\begingroup \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks ! % Do not use \turnoffactive in these arguments. Since the toc is ! % typeset in cmr, so characters such as _ would come out wrong; we ! % have to do the usual translation tricks. ! \entry{#1}{#2}% \endgroup} *************** *** 3513,3540 **** \def\tex{\begingroup ! \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 ! \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 ! \catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie ! \catcode `\%=14 ! \catcode 43=12 % plus ! \catcode`\"=12 ! \catcode`\==12 ! \catcode`\|=12 ! \catcode`\<=12 ! \catcode`\>=12 ! \escapechar=`\\ ! % ! \let\,=\ptexcomma ! \let\{=\ptexlbrace ! \let\}=\ptexrbrace ! \let\.=\ptexdot ! \let\*=\ptexstar ! \let\dots=\ptexdots ! \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% ! \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% ! \def\@{@}% ! \let\bullet=\ptexbullet ! \let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext ! % \let\Etex=\endgroup} --- 3532,3564 ---- \def\tex{\begingroup ! \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 ! \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 ! \catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie ! \catcode `\%=14 ! \catcode 43=12 % plus ! \catcode`\"=12 ! \catcode`\==12 ! \catcode`\|=12 ! \catcode`\<=12 ! \catcode`\>=12 ! \escapechar=`\\ ! % ! \let\b=\ptexb ! \let\bullet=\ptexbullet ! \let\c=\ptexc ! \let\,=\ptexcomma ! \let\.=\ptexdot ! \let\dots=\ptexdots ! \let\equiv=\ptexequiv ! \let\!=\ptexexclam ! \let\i=\ptexi ! \let\{=\ptexlbrace ! \let\}=\ptexrbrace ! \let\*=\ptexstar ! \let\t=\ptext ! % ! \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% ! \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% ! \def\@{@}% \let\Etex=\endgroup} *************** *** 4389,4393 **** \expandafter\ifx\csname X#1\endcsname\relax % If not defined, say something at least. ! $\langle$un\-de\-fined$\rangle$% \ifhavexrefs \message{\linenumber Undefined cross reference `#1'.}% --- 4413,4417 ---- \expandafter\ifx\csname X#1\endcsname\relax % If not defined, say something at least. ! \angleleft un\-de\-fined\angleright \ifhavexrefs \message{\linenumber Undefined cross reference `#1'.}% *************** *** 4406,4413 **** % This is the macro invoked by entries in the aux file. ! \def\xrdef #1#2{{% ! \catcode`\'=\other ! \expandafter\gdef\csname X#1\endcsname{#2}% ! }} % Read the last existing aux file, if any. No error if none exists. --- 4430,4440 ---- % This is the macro invoked by entries in the aux file. ! % ! \def\xrdef#1{\begingroup ! % Reenable \ as an escape while reading the second argument. ! \catcode`\\ = 0 ! \afterassignment\endgroup ! \expandafter\gdef\csname X#1\endcsname ! } % Read the last existing aux file, if any. No error if none exists. diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/tm.texi gcc-2.8.1/tm.texi *** gcc-2.8.0/tm.texi Wed Dec 3 08:11:40 1997 --- gcc-2.8.1/tm.texi Wed Feb 25 21:04:45 1998 *************** *** 1,3 **** ! @c Copyright (C) 1988,89,92,93,94,96,1997 Free Software Foundation, Inc. @c This is part of the GCC manual. @c For copying conditions, see the file gcc.texi. --- 1,3 ---- ! @c Copyright (C) 1988,89,92,93,94,96,97,1998 Free Software Foundation, Inc. @c This is part of the GCC manual. @c For copying conditions, see the file gcc.texi. *************** *** 2039,2043 **** @item EXTRA_CONSTRAINT (@var{value}, @var{c}) A C expression that defines the optional machine-dependent constraint ! letters (@item @samp{Q}, @samp{R}, @samp{S}, @samp{T}, @samp{U}) that can be used to segregate specific types of operands, usually memory references, for the target machine. Normally this macro will not be --- 2039,2043 ---- @item EXTRA_CONSTRAINT (@var{value}, @var{c}) A C expression that defines the optional machine-dependent constraint ! letters (@samp{Q}, @samp{R}, @samp{S}, @samp{T}, @samp{U}) that can be used to segregate specific types of operands, usually memory references, for the target machine. Normally this macro will not be *************** *** 2313,2317 **** @code{FRAME_POINTER_REGNUM} the number of a special, fixed register to be used internally until the offset is known, and define ! @code{HARD_FRAME_POINTER_REGNUM} to be actual the hard register number used for the frame pointer. --- 2313,2317 ---- @code{FRAME_POINTER_REGNUM} the number of a special, fixed register to be used internally until the offset is known, and define ! @code{HARD_FRAME_POINTER_REGNUM} to be the actual hard register number used for the frame pointer. *************** *** 5949,5953 **** Define the macros @code{REGISTER_PREFIX}, @code{LOCAL_LABEL_PREFIX}, @code{USER_LABEL_PREFIX} and @code{IMMEDIATE_PREFIX} if you can express ! the variations in assemble language syntax with that mechanism. Define @code{ASSEMBLER_DIALECT} and use the @samp{@{option0|option1@}} syntax if the syntax variant are larger and involve such things as different --- 5949,5953 ---- Define the macros @code{REGISTER_PREFIX}, @code{LOCAL_LABEL_PREFIX}, @code{USER_LABEL_PREFIX} and @code{IMMEDIATE_PREFIX} if you can express ! the variations in assembler language syntax with that mechanism. Define @code{ASSEMBLER_DIALECT} and use the @samp{@{option0|option1@}} syntax if the syntax variant are larger and involve such things as different *************** *** 6228,6238 **** @findex PREFERRED_DEBUGGING_TYPE @item PREFERRED_DEBUGGING_TYPE ! A C expression that returns the type of debugging output GNU CC produces ! when the user specifies @samp{-g} or @samp{-ggdb}. Define this if you ! have arranged for GNU CC to support more than one format of debugging ! output. Currently, the allowable values are @code{DBX_DEBUG}, @code{SDB_DEBUG}, @code{DWARF_DEBUG}, @code{DWARF2_DEBUG}, and @code{XCOFF_DEBUG}. The value of this macro only affects the default debugging output; the user can always get a specific type of output by using @samp{-gstabs}, --- 6228,6245 ---- @findex PREFERRED_DEBUGGING_TYPE @item PREFERRED_DEBUGGING_TYPE ! A C expression that returns the type of debugging output GNU CC should ! produce when the user specifies just @samp{-g}. Define ! this if you have arranged for GNU CC to support more than one format of ! debugging output. Currently, the allowable values are @code{DBX_DEBUG}, @code{SDB_DEBUG}, @code{DWARF_DEBUG}, @code{DWARF2_DEBUG}, and @code{XCOFF_DEBUG}. + When the user specifies @samp{-ggdb}, GNU CC normally also uses the + value of this macro to select the debugging output format, but with two + exceptions. If @code{DWARF2_DEBUGGING_INFO} is defined and + @code{LINKER_DOES_NOT_WORK_WITH_DWARF2} is not defined, GNU CC uses the + value @code{DWARF2_DEBUG}. Otherwise, if @code{DBX_DEBUGGING_INFO} is + defined, GNU CC uses @code{DBX_DEBUG}. + The value of this macro only affects the default debugging output; the user can always get a specific type of output by using @samp{-gstabs}, *************** *** 6564,6567 **** --- 6571,6581 ---- as appropriate from @code{FUNCTION_PROLOGUE} if you don't. + @findex LINKER_DOES_NOT_WORK_WITH_DWARF2 + @item LINKER_DOES_NOT_WORK_WITH_DWARF2 + Define this macro if the linker does not work with Dwarf version 2. + Normally, if the user specifies only @samp{-ggdb} GNU CC will use Dwarf + version 2 if available; this macro disables this. See the description + of the @code{PREFERRED_DEBUGGING_TYPE} macro for more details. + @findex PUT_SDB_@dots{} @item PUT_SDB_@dots{} *************** *** 6803,6807 **** the table built by @file{genrecog} to be more compact and efficient, thus speeding up the compiler. The most important predicates to include ! in the list specified by this macro are thoses used in the most insn patterns. --- 6817,6821 ---- the table built by @file{genrecog} to be more compact and efficient, thus speeding up the compiler. The most important predicates to include ! in the list specified by this macro are those used in the most insn patterns. diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/toplev.c gcc-2.8.1/toplev.c *** gcc-2.8.0/toplev.c Wed Dec 31 08:02:31 1997 --- gcc-2.8.1/toplev.c Wed Feb 25 21:04:46 1998 *************** *** 1,4 **** /* Top level of GNU C compiler ! Copyright (C) 1987, 88, 89, 92-6, 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* Top level of GNU C compiler ! Copyright (C) 1987, 88, 89, 92-7, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 37,40 **** --- 37,44 ---- #include + #ifdef HAVE_UNISTD_H + # include + #endif + #undef FLOAT #ifdef HAVE_SYS_PARAM_H *************** *** 69,72 **** --- 73,79 ---- #include "flags.h" #include "insn-attr.h" + #include "insn-codes.h" + #include "insn-config.h" + #include "recog.h" #include "defaults.h" #include "output.h" *************** *** 192,196 **** #define MAX_LINE 75 ! #ifdef __alpha extern char *sbrk (); #endif --- 199,203 ---- #define MAX_LINE 75 ! #ifdef NEED_DECLARATION_SBRK extern char *sbrk (); #endif *************** *** 952,957 **** #else /* not _WIN32 */ #ifdef USG times (&tms); ! return (tms.tms_utime + tms.tms_stime) * (1000000 / HZ); #else #ifndef VMS --- 959,973 ---- #else /* not _WIN32 */ #ifdef USG + # if HAVE_SYSCONF && defined _SC_CLK_TCK + # define TICKS_PER_SECOND sysconf (_SC_CLK_TCK) /* POSIX 1003.1-1996 */ + # else + # ifdef CLK_TCK + # define TICKS_PER_SECOND CLK_TCK /* POSIX 1003.1-1988; obsolescent */ + # else + # define TICKS_PER_SECOND HZ /* traditional UNIX */ + # endif + # endif times (&tms); ! return (tms.tms_utime + tms.tms_stime) * (1000000 / TICKS_PER_SECOND); #else #ifndef VMS *************** *** 2420,2424 **** as gcc_compiled., if profiling. */ if (profile_flag || profile_block_flag) ! assemble_zeros (UNITS_PER_WORD); } --- 2436,2447 ---- as gcc_compiled., if profiling. */ if (profile_flag || profile_block_flag) ! { ! /* It's best if we can write a nop here since some ! assemblers don't tolerate zeros in the text section. */ ! if (insn_template[CODE_FOR_nop] != 0) ! output_asm_insn (insn_template[CODE_FOR_nop], NULL_PTR); ! else ! assemble_zeros (UNITS_PER_WORD); ! } } *************** *** 2994,2998 **** fprintf (rtl_dump_file, ";; (integrable)\n\n"); print_rtl (rtl_dump_file, insns); ! fflush (rtl_dump_file); }); --- 3017,3022 ---- fprintf (rtl_dump_file, ";; (integrable)\n\n"); print_rtl (rtl_dump_file, insns); ! if (! quiet_flag) ! fflush (rtl_dump_file); }); *************** *** 3169,3173 **** (*decl_printable_name) (decl, 2)); print_rtl (jump_opt_dump_file, insns); ! fflush (jump_opt_dump_file); }); --- 3193,3198 ---- (*decl_printable_name) (decl, 2)); print_rtl (jump_opt_dump_file, insns); ! if (! quiet_flag) ! fflush (jump_opt_dump_file); }); *************** *** 3206,3210 **** { print_rtl (cse_dump_file, insns); ! fflush (cse_dump_file); }); --- 3231,3236 ---- { print_rtl (cse_dump_file, insns); ! if (! quiet_flag) ! fflush (cse_dump_file); }); *************** *** 3218,3222 **** (*decl_printable_name) (decl, 2)); print_rtl (addressof_dump_file, insns); ! fflush (addressof_dump_file); }); --- 3244,3249 ---- (*decl_printable_name) (decl, 2)); print_rtl (addressof_dump_file, insns); ! if (! quiet_flag) ! fflush (addressof_dump_file); }); *************** *** 3244,3248 **** { print_rtl (loop_dump_file, insns); ! fflush (loop_dump_file); }); --- 3271,3276 ---- { print_rtl (loop_dump_file, insns); ! if (! quiet_flag) ! fflush (loop_dump_file); }); *************** *** 3284,3288 **** { print_rtl (cse2_dump_file, insns); ! fflush (cse2_dump_file); }); --- 3312,3317 ---- { print_rtl (cse2_dump_file, insns); ! if (! quiet_flag) ! fflush (cse2_dump_file); }); *************** *** 3304,3308 **** { print_rtl (branch_prob_dump_file, insns); ! fflush (branch_prob_dump_file); }); /* We are no longer anticipating cse in this function, at least. */ --- 3333,3338 ---- { print_rtl (branch_prob_dump_file, insns); ! if (! quiet_flag) ! fflush (branch_prob_dump_file); }); /* We are no longer anticipating cse in this function, at least. */ *************** *** 3358,3362 **** { print_rtl_with_bb (flow_dump_file, insns); ! fflush (flow_dump_file); }); --- 3388,3393 ---- { print_rtl_with_bb (flow_dump_file, insns); ! if (! quiet_flag) ! fflush (flow_dump_file); }); *************** *** 3375,3379 **** dump_combine_stats (combine_dump_file); print_rtl_with_bb (combine_dump_file, insns); ! fflush (combine_dump_file); }); --- 3406,3411 ---- dump_combine_stats (combine_dump_file); print_rtl_with_bb (combine_dump_file, insns); ! if (! quiet_flag) ! fflush (combine_dump_file); }); *************** *** 3402,3406 **** { print_rtl_with_bb (sched_dump_file, insns); ! fflush (sched_dump_file); }); --- 3434,3439 ---- { print_rtl_with_bb (sched_dump_file, insns); ! if (! quiet_flag) ! fflush (sched_dump_file); }); *************** *** 3425,3429 **** dump_local_alloc (local_reg_dump_file); print_rtl_with_bb (local_reg_dump_file, insns); ! fflush (local_reg_dump_file); }); --- 3458,3463 ---- dump_local_alloc (local_reg_dump_file); print_rtl_with_bb (local_reg_dump_file, insns); ! if (! quiet_flag) ! fflush (local_reg_dump_file); }); *************** *** 3454,3458 **** dump_global_regs (global_reg_dump_file); print_rtl_with_bb (global_reg_dump_file, insns); ! fflush (global_reg_dump_file); }); --- 3488,3493 ---- dump_global_regs (global_reg_dump_file); print_rtl_with_bb (global_reg_dump_file, insns); ! if (! quiet_flag) ! fflush (global_reg_dump_file); }); *************** *** 3493,3497 **** { print_rtl_with_bb (sched2_dump_file, insns); ! fflush (sched2_dump_file); }); } --- 3528,3533 ---- { print_rtl_with_bb (sched2_dump_file, insns); ! if (! quiet_flag) ! fflush (sched2_dump_file); }); } *************** *** 3521,3525 **** (*decl_printable_name) (decl, 2)); print_rtl_with_bb (jump2_opt_dump_file, insns); ! fflush (jump2_opt_dump_file); }); --- 3557,3562 ---- (*decl_printable_name) (decl, 2)); print_rtl_with_bb (jump2_opt_dump_file, insns); ! if (! quiet_flag) ! fflush (jump2_opt_dump_file); }); *************** *** 3543,3547 **** (*decl_printable_name) (decl, 2)); print_rtl_with_bb (dbr_sched_dump_file, insns); ! fflush (dbr_sched_dump_file); }); } --- 3580,3585 ---- (*decl_printable_name) (decl, 2)); print_rtl_with_bb (dbr_sched_dump_file, insns); ! if (! quiet_flag) ! fflush (dbr_sched_dump_file); }); } *************** *** 3564,3568 **** (*decl_printable_name) (decl, 2)); print_rtl_with_bb (stack_reg_dump_file, insns); ! fflush (stack_reg_dump_file); }); } --- 3602,3607 ---- (*decl_printable_name) (decl, 2)); print_rtl_with_bb (stack_reg_dump_file, insns); ! if (! quiet_flag) ! fflush (stack_reg_dump_file); }); } *************** *** 3593,3597 **** final_end_function (insns, asm_out_file, optimize); assemble_end_function (decl, fnname); ! fflush (asm_out_file); /* Release all memory held by regsets now */ --- 3632,3637 ---- final_end_function (insns, asm_out_file, optimize); assemble_end_function (decl, fnname); ! if (! quiet_flag) ! fflush (asm_out_file); /* Release all memory held by regsets now */ *************** *** 4159,4163 **** if (len > 1 && strncmp (str, "ggdb", len) == 0) { ! #ifdef DWARF2_DEBUGGING_INFO type = DWARF2_DEBUG; #else --- 4199,4203 ---- if (len > 1 && strncmp (str, "ggdb", len) == 0) { ! #if defined (DWARF2_DEBUGGING_INFO) && !defined (LINKER_DOES_NOT_WORK_WITH_DWARF2) type = DWARF2_DEBUG; #else diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/tree.c gcc-2.8.1/tree.c *** gcc-2.8.0/tree.c Wed Dec 3 08:11:43 1997 --- gcc-2.8.1/tree.c Mon Mar 2 19:37:46 1998 *************** *** 1,4 **** /* Language-independent node constructors for parse phase of GNU compiler. ! Copyright (C) 1987, 88, 92-96, 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* Language-independent node constructors for parse phase of GNU compiler. ! Copyright (C) 1987, 88, 92-97, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 1692,1696 **** return 0; ! prec = (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr))); high = TREE_INT_CST_HIGH (expr); --- 1692,1696 ---- return 0; ! prec = (POINTER_TYPE_P (TREE_TYPE (expr)) ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr))); high = TREE_INT_CST_HIGH (expr); *************** *** 1733,1737 **** return tree_log2 (TREE_REALPART (expr)); ! prec = (TREE_CODE (TREE_TYPE (expr)) == POINTER_TYPE ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr))); --- 1733,1737 ---- return tree_log2 (TREE_REALPART (expr)); ! prec = (POINTER_TYPE_P (TREE_TYPE (expr)) ? POINTER_SIZE : TYPE_PRECISION (TREE_TYPE (expr))); *************** *** 2193,2219 **** } ! /* Return the size of TYPE (in bytes) as an integer, ! or return -1 if the size can vary. */ ! int int_size_in_bytes (type) tree type; { ! unsigned int size; if (type == error_mark_node) return 0; type = TYPE_MAIN_VARIANT (type); ! if (TYPE_SIZE (type) == 0) return -1; ! if (TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST) return -1; ! if (TREE_INT_CST_HIGH (TYPE_SIZE (type)) != 0) ! { ! tree t = size_binop (CEIL_DIV_EXPR, TYPE_SIZE (type), ! size_int (BITS_PER_UNIT)); ! return TREE_INT_CST_LOW (t); ! } ! size = TREE_INT_CST_LOW (TYPE_SIZE (type)); ! return (size + BITS_PER_UNIT - 1) / BITS_PER_UNIT; } --- 2193,2222 ---- } ! /* Return the size of TYPE (in bytes) as a wide integer ! or return -1 if the size can vary or is larger than an integer. */ ! HOST_WIDE_INT int_size_in_bytes (type) tree type; { ! tree t; ! if (type == error_mark_node) return 0; + type = TYPE_MAIN_VARIANT (type); ! if (TYPE_SIZE (type) == 0 ! || TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST) return -1; ! ! if (TREE_INT_CST_HIGH (TYPE_SIZE (type)) == 0) ! return ((TREE_INT_CST_LOW (TYPE_SIZE (type)) + BITS_PER_UNIT - 1) ! / BITS_PER_UNIT); ! ! t = size_binop (CEIL_DIV_EXPR, TYPE_SIZE (type), size_int (BITS_PER_UNIT)); ! if (TREE_CODE (t) != INTEGER_CST || TREE_INT_CST_HIGH (t) != 0) return -1; ! ! return TREE_INT_CST_LOW (t); } *************** *** 3300,3304 **** /* Handle putting a type attribute on pointer-to-function-type by putting the attribute on the function type. */ ! else if (TREE_CODE (type) == POINTER_TYPE && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE && VALID_MACHINE_TYPE_ATTRIBUTE (TREE_TYPE (type), type_attr_list, --- 3303,3307 ---- /* Handle putting a type attribute on pointer-to-function-type by putting the attribute on the function type. */ ! else if (POINTER_TYPE_P (type) && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE && VALID_MACHINE_TYPE_ATTRIBUTE (TREE_TYPE (type), type_attr_list, *************** *** 4157,4162 **** { register tree t = TYPE_REFERENCE_TO (to_type); - register struct obstack *ambient_obstack = current_obstack; - register struct obstack *ambient_saveable_obstack = saveable_obstack; /* First, if we already have a type for pointers to TO_TYPE, use it. */ --- 4160,4163 ---- *************** *** 4165,4176 **** return t; ! /* We need a new one. If TO_TYPE is permanent, make this permanent too. */ ! if (TREE_PERMANENT (to_type)) ! { ! current_obstack = &permanent_obstack; ! saveable_obstack = &permanent_obstack; ! } ! t = make_node (REFERENCE_TYPE); TREE_TYPE (t) = to_type; --- 4166,4174 ---- return t; ! /* We need a new one. Put this in the same obstack as TO_TYPE. */ ! push_obstacks (TYPE_OBSTACK (to_type), TYPE_OBSTACK (to_type)); t = make_node (REFERENCE_TYPE); + pop_obstacks (); + TREE_TYPE (t) = to_type; *************** *** 4180,4185 **** layout_type (t); - current_obstack = ambient_obstack; - saveable_obstack = ambient_saveable_obstack; return t; } --- 4178,4181 ---- diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/tree.h gcc-2.8.1/tree.h *** gcc-2.8.0/tree.h Wed Dec 3 08:11:46 1997 --- gcc-2.8.1/tree.h Sat Feb 28 15:58:23 1998 *************** *** 1,4 **** /* Front-end tree definitions for GNU compiler. ! Copyright (C) 1989, 93, 94, 95, 96, 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* Front-end tree definitions for GNU compiler. ! Copyright (C) 1989, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 197,201 **** TREE_STATIC in ! VAR_DECL, FUNCTION_DECL, CONSTRUCTOR TREE_NO_UNUSED_WARNING in CONVERT_EXPR, NOP_EXPR, COMPOUND_EXPR --- 197,201 ---- TREE_STATIC in ! VAR_DECL, FUNCTION_DECL, CONSTRUCTOR, ADDR_EXPR TREE_NO_UNUSED_WARNING in CONVERT_EXPR, NOP_EXPR, COMPOUND_EXPR *************** *** 246,250 **** TREE_READONLY in ! VAR_DECL, PARM_DECL, FIELD_DECL, ..._REF ITERATOR_BOUND_P in VAR_DECL if iterator (C) --- 246,250 ---- TREE_READONLY in ! all expressions ITERATOR_BOUND_P in VAR_DECL if iterator (C) *************** *** 1172,1177 **** (rtl) info */ /* For FUNCTION_DECLs: points to insn that constitutes its definition ! on the permanent obstack. For any other kind of decl, this is the ! alignment. */ union { struct rtx_def *r; --- 1172,1176 ---- (rtl) info */ /* For FUNCTION_DECLs: points to insn that constitutes its definition ! on the permanent obstack. For FIELD_DECL, this is DECL_FIELD_SIZE. */ union { struct rtx_def *r; *************** *** 1394,1398 **** extern tree convert PROTO((tree, tree)); extern tree size_in_bytes PROTO((tree)); ! extern int int_size_in_bytes PROTO((tree)); extern tree size_binop PROTO((enum tree_code, tree, tree)); extern tree size_int PROTO((unsigned HOST_WIDE_INT)); --- 1393,1397 ---- extern tree convert PROTO((tree, tree)); extern tree size_in_bytes PROTO((tree)); ! extern HOST_WIDE_INT int_size_in_bytes PROTO((tree)); extern tree size_binop PROTO((enum tree_code, tree, tree)); extern tree size_int PROTO((unsigned HOST_WIDE_INT)); diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/unroll.c gcc-2.8.1/unroll.c *** gcc-2.8.0/unroll.c Tue Dec 30 17:38:28 1997 --- gcc-2.8.1/unroll.c Mon Feb 9 07:49:27 1998 *************** *** 1,4 **** /* Try to unroll loops, and split induction variables. ! Copyright (C) 1992, 1993, 1994, 1995, 1997 Free Software Foundation, Inc. Contributed by James E. Wilson, Cygnus Support/UC Berkeley. --- 1,4 ---- /* Try to unroll loops, and split induction variables. ! Copyright (C) 1992, 93, 94, 95, 97, 1998 Free Software Foundation, Inc. Contributed by James E. Wilson, Cygnus Support/UC Berkeley. *************** *** 692,697 **** { if (JUMP_LABEL (insn)) ! map->label_map[CODE_LABEL_NUMBER (JUMP_LABEL (insn))] ! = JUMP_LABEL (insn); else if (GET_CODE (PATTERN (insn)) == ADDR_VEC || GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC) --- 692,698 ---- { if (JUMP_LABEL (insn)) ! set_label_in_map (map, ! CODE_LABEL_NUMBER (JUMP_LABEL (insn)), ! JUMP_LABEL (insn)); else if (GET_CODE (PATTERN (insn)) == ADDR_VEC || GET_CODE (PATTERN (insn)) == ADDR_DIFF_VEC) *************** *** 705,709 **** { label = XEXP (XVECEXP (pat, diff_vec_p, i), 0); ! map->label_map[CODE_LABEL_NUMBER (label)] = label; } } --- 706,712 ---- { label = XEXP (XVECEXP (pat, diff_vec_p, i), 0); ! set_label_in_map (map, ! CODE_LABEL_NUMBER (label), ! label); } } *************** *** 1044,1048 **** for (j = 0; j < max_labelno; j++) if (local_label[j]) ! map->label_map[j] = gen_label_rtx (); for (j = FIRST_PSEUDO_REGISTER; j < max_reg_before_loop; j++) --- 1047,1051 ---- for (j = 0; j < max_labelno; j++) if (local_label[j]) ! set_label_in_map (map, j, gen_label_rtx ()); for (j = FIRST_PSEUDO_REGISTER; j < max_reg_before_loop; j++) *************** *** 1189,1193 **** for (j = 0; j < max_labelno; j++) if (local_label[j]) ! map->label_map[j] = gen_label_rtx (); for (j = FIRST_PSEUDO_REGISTER; j < max_reg_before_loop; j++) --- 1192,1196 ---- for (j = 0; j < max_labelno; j++) if (local_label[j]) ! set_label_in_map (map, j, gen_label_rtx ()); for (j = FIRST_PSEUDO_REGISTER; j < max_reg_before_loop; j++) *************** *** 1202,1207 **** pattern = PATTERN (insn); ! tem = map->label_map[CODE_LABEL_NUMBER ! (XEXP (SET_SRC (pattern), 0))]; SET_SRC (pattern) = gen_rtx (LABEL_REF, VOIDmode, tem); --- 1205,1211 ---- pattern = PATTERN (insn); ! tem = get_label_from_map (map, ! CODE_LABEL_NUMBER ! (XEXP (SET_SRC (pattern), 0))); SET_SRC (pattern) = gen_rtx (LABEL_REF, VOIDmode, tem); *************** *** 1428,1431 **** --- 1432,1436 ---- verifying that all operands are of the proper form. + PATTERN must be the result of single_set. The return value is the amount that the giv is incremented by. */ *************** *** 1595,1599 **** { rtx insn, pattern; ! rtx tem, copy; int dest_reg_was_split, i; rtx cc0_insn = 0; --- 1600,1604 ---- { rtx insn, pattern; ! rtx set, tem, copy; int dest_reg_was_split, i; rtx cc0_insn = 0; *************** *** 1610,1617 **** { final_label = gen_label_rtx (); ! map->label_map[CODE_LABEL_NUMBER (start_label)] = final_label; } else ! map->label_map[CODE_LABEL_NUMBER (start_label)] = start_label; start_sequence (); --- 1615,1623 ---- { final_label = gen_label_rtx (); ! set_label_in_map (map, CODE_LABEL_NUMBER (start_label), ! final_label); } else ! set_label_in_map (map, CODE_LABEL_NUMBER (start_label), start_label); start_sequence (); *************** *** 1639,1651 **** SET_DEST to a new register. */ ! if (GET_CODE (pattern) == SET ! && GET_CODE (SET_DEST (pattern)) == REG ! && addr_combined_regs[REGNO (SET_DEST (pattern))]) { struct iv_class *bl; struct induction *v, *tv; ! int regno = REGNO (SET_DEST (pattern)); ! v = addr_combined_regs[REGNO (SET_DEST (pattern))]; bl = reg_biv_class[REGNO (v->src_reg)]; --- 1645,1657 ---- SET_DEST to a new register. */ ! if ((set = single_set (insn)) ! && GET_CODE (SET_DEST (set)) == REG ! && addr_combined_regs[REGNO (SET_DEST (set))]) { struct iv_class *bl; struct induction *v, *tv; ! int regno = REGNO (SET_DEST (set)); ! v = addr_combined_regs[REGNO (SET_DEST (set))]; bl = reg_biv_class[REGNO (v->src_reg)]; *************** *** 1656,1660 **** below by emit_unrolled_add. */ ! giv_inc = calculate_giv_inc (pattern, insn, regno); /* Now find all address giv's that were combined with this --- 1662,1666 ---- below by emit_unrolled_add. */ ! giv_inc = calculate_giv_inc (set, insn, regno); /* Now find all address giv's that were combined with this *************** *** 1730,1738 **** dest_reg_was_split = 0; ! if (GET_CODE (pattern) == SET ! && GET_CODE (SET_DEST (pattern)) == REG ! && splittable_regs[REGNO (SET_DEST (pattern))]) { ! int regno = REGNO (SET_DEST (pattern)); dest_reg_was_split = 1; --- 1736,1744 ---- dest_reg_was_split = 0; ! if ((set = single_set (insn)) ! && GET_CODE (SET_DEST (set)) == REG ! && splittable_regs[REGNO (SET_DEST (set))]) { ! int regno = REGNO (SET_DEST (set)); dest_reg_was_split = 1; *************** *** 1742,1748 **** if (giv_inc == 0) ! giv_inc = calculate_giv_inc (pattern, insn, regno); ! giv_dest_reg = SET_DEST (pattern); ! giv_src_reg = SET_DEST (pattern); if (unroll_type == UNROLL_COMPLETELY) --- 1748,1754 ---- if (giv_inc == 0) ! giv_inc = calculate_giv_inc (set, insn, regno); ! giv_dest_reg = SET_DEST (set); ! giv_src_reg = SET_DEST (set); if (unroll_type == UNROLL_COMPLETELY) *************** *** 1897,1902 **** { if (! redirect_exp (&pattern, ! map->label_map[CODE_LABEL_NUMBER ! (JUMP_LABEL (insn))], exit_label, copy)) abort (); --- 1903,1909 ---- { if (! redirect_exp (&pattern, ! get_label_from_map (map, ! CODE_LABEL_NUMBER ! (JUMP_LABEL (insn))), exit_label, copy)) abort (); *************** *** 1915,1920 **** LABEL_NUSES (lab) = 0; if (! redirect_exp (&pattern, ! map->label_map[CODE_LABEL_NUMBER ! (JUMP_LABEL (insn))], lab, copy)) abort (); --- 1922,1928 ---- LABEL_NUSES (lab) = 0; if (! redirect_exp (&pattern, ! get_label_from_map (map, ! CODE_LABEL_NUMBER ! (JUMP_LABEL (insn))), lab, copy)) abort (); *************** *** 1937,1943 **** /* Can't use the label_map for every insn, since this may be the backward branch, and hence the label was not mapped. */ ! if (GET_CODE (pattern) == SET) { ! tem = SET_SRC (pattern); if (GET_CODE (tem) == LABEL_REF) label = XEXP (tem, 0); --- 1945,1951 ---- /* Can't use the label_map for every insn, since this may be the backward branch, and hence the label was not mapped. */ ! if ((set = single_set (copy))) { ! tem = SET_SRC (set); if (GET_CODE (tem) == LABEL_REF) label = XEXP (tem, 0); *************** *** 1959,1963 **** so just use the label_map to get the new jump label. */ JUMP_LABEL (copy) ! = map->label_map[CODE_LABEL_NUMBER (JUMP_LABEL (insn))]; } --- 1967,1972 ---- so just use the label_map to get the new jump label. */ JUMP_LABEL (copy) ! = get_label_from_map (map, ! CODE_LABEL_NUMBER (JUMP_LABEL (insn))); } *************** *** 2037,2041 **** if (insn != start_label) { ! copy = emit_label (map->label_map[CODE_LABEL_NUMBER (insn)]); map->const_age++; } --- 2046,2051 ---- if (insn != start_label) { ! copy = emit_label (get_label_from_map (map, ! CODE_LABEL_NUMBER (insn))); map->const_age++; } diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/varasm.c gcc-2.8.1/varasm.c *** gcc-2.8.0/varasm.c Wed Dec 3 08:11:48 1997 --- gcc-2.8.1/varasm.c Sun Mar 1 07:04:05 1998 *************** *** 1,4 **** /* Output variables, constants and external declarations, for GNU compiler. ! Copyright (C) 1987, 88, 89, 92-6, 1997 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,4 ---- /* Output variables, constants and external declarations, for GNU compiler. ! Copyright (C) 1987, 88, 89, 92-97, 1998 Free Software Foundation, Inc. This file is part of GNU CC. *************** *** 2647,2650 **** --- 2647,2655 ---- int length = list_length (CONSTRUCTOR_ELTS (exp)); tree type; + int have_purpose = 0; + + for (link = CONSTRUCTOR_ELTS (exp); link; link = TREE_CHAIN (link)) + if (TREE_PURPOSE (link)) + have_purpose = 1; if (bcmp ((char *) &length, p, sizeof length)) *************** *** 2654,2658 **** /* For record constructors, insist that the types match. ! For arrays, just verify both constructors are for arrays. */ if (TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE) type = TREE_TYPE (exp); --- 2659,2665 ---- /* For record constructors, insist that the types match. ! For arrays, just verify both constructors are for arrays. ! Then insist that either both or none have any TREE_PURPOSE ! values. */ if (TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE) type = TREE_TYPE (exp); *************** *** 2665,2672 **** p += sizeof type; /* For arrays, insist that the size in bytes match. */ if (TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE) { ! int size = int_size_in_bytes (TREE_TYPE (exp)); if (bcmp ((char *) &size, p, sizeof size)) return 0; --- 2672,2685 ---- p += sizeof type; + if (bcmp ((char *) &have_purpose, p, sizeof have_purpose)) + return 0; + + p += sizeof have_purpose; + /* For arrays, insist that the size in bytes match. */ if (TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE) { ! HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (exp)); ! if (bcmp ((char *) &size, p, sizeof size)) return 0; *************** *** 2691,2694 **** --- 2704,2731 ---- p += sizeof zero; } + + if (TREE_PURPOSE (link) + && TREE_CODE (TREE_PURPOSE (link)) == FIELD_DECL) + { + if (bcmp ((char *) &TREE_PURPOSE (link), p, + sizeof TREE_PURPOSE (link))) + return 0; + + p += sizeof TREE_PURPOSE (link); + } + else if (TREE_PURPOSE (link)) + { + if ((p = compare_constant_1 (TREE_PURPOSE (link), p)) == 0) + return 0; + } + else if (have_purpose) + { + int zero = 0; + + if (bcmp ((char *) &zero, p, sizeof zero)) + return 0; + + p += sizeof zero; + } } *************** *** 2819,2827 **** int length = list_length (CONSTRUCTOR_ELTS (exp)); tree type; obstack_grow (&permanent_obstack, (char *) &length, sizeof length); /* For record constructors, insist that the types match. ! For arrays, just verify both constructors are for arrays. */ if (TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE) type = TREE_TYPE (exp); --- 2856,2871 ---- int length = list_length (CONSTRUCTOR_ELTS (exp)); tree type; + int have_purpose = 0; + + for (link = CONSTRUCTOR_ELTS (exp); link; link = TREE_CHAIN (link)) + if (TREE_PURPOSE (link)) + have_purpose = 1; obstack_grow (&permanent_obstack, (char *) &length, sizeof length); /* For record constructors, insist that the types match. ! For arrays, just verify both constructors are for arrays. ! Then insist that either both or none have any TREE_PURPOSE ! values. */ if (TREE_CODE (TREE_TYPE (exp)) == RECORD_TYPE) type = TREE_TYPE (exp); *************** *** 2829,2837 **** type = 0; obstack_grow (&permanent_obstack, (char *) &type, sizeof type); /* For arrays, insist that the size in bytes match. */ if (TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE) { ! int size = int_size_in_bytes (TREE_TYPE (exp)); obstack_grow (&permanent_obstack, (char *) &size, sizeof size); } --- 2873,2883 ---- type = 0; obstack_grow (&permanent_obstack, (char *) &type, sizeof type); + obstack_grow (&permanent_obstack, (char *) &have_purpose, + sizeof have_purpose); /* For arrays, insist that the size in bytes match. */ if (TREE_CODE (TREE_TYPE (exp)) == ARRAY_TYPE) { ! HOST_WIDE_INT size = int_size_in_bytes (TREE_TYPE (exp)); obstack_grow (&permanent_obstack, (char *) &size, sizeof size); } *************** *** 2844,2847 **** --- 2890,2908 ---- { tree zero = 0; + + obstack_grow (&permanent_obstack, + (char *) &zero, sizeof zero); + } + + if (TREE_PURPOSE (link) + && TREE_CODE (TREE_PURPOSE (link)) == FIELD_DECL) + obstack_grow (&permanent_obstack, + (char *) &TREE_PURPOSE (link), + sizeof TREE_PURPOSE (link)); + else if (TREE_PURPOSE (link)) + record_constant_1 (TREE_PURPOSE (link)); + else if (have_purpose) + { + int zero = 0; obstack_grow (&permanent_obstack, diff -rc2P -x c-parse.y -x c-parse.c -x c-parse.h -x c-gperf.h -x cexp.c -x bi-parser.c -x bi-parser.h -x TAGS -x INSTALL -x configure -x config.in -x gcc.?? -x gcc.??s -x gcc.aux -x gcc.info* -x cpp.?? -x cpp.??s -x cpp.aux -x cpp.info* -x parse.c -x parse.h -x objc-parse.c -x objc-parse.y gcc-2.8.0/version.c gcc-2.8.1/version.c *** gcc-2.8.0/version.c Fri Dec 5 07:29:02 1997 --- gcc-2.8.1/version.c Mon Mar 2 20:57:44 1998 *************** *** 1 **** ! char *version_string = "2.8.0"; --- 1 ---- ! char *version_string = "2.8.1";