diff options
| author | tv <tv@NetBSD.org> | 1998-08-24 17:55:20 +0000 |
|---|---|---|
| committer | tv <tv@NetBSD.org> | 1998-08-24 17:55:20 +0000 |
| commit | 2da237ca1fa07fcae179f4a65098995c16a15b8c (patch) | |
| tree | f1ad7abd9f497efe5241816803b4f977ffdec17f /gnu | |
| parent | 705363981e6a977cef7c77b5aa32f4a71a598350 (diff) | |
Bugfix import of egcs 1.1, 1998-08-24 snapshot.
Diffstat (limited to 'gnu')
| -rw-r--r-- | gnu/dist/gcc/ChangeLog | 59 | ||||
| -rw-r--r-- | gnu/dist/gcc/cp/ChangeLog | 5 | ||||
| -rw-r--r-- | gnu/dist/gcc/cp/pt.c | 40 | ||||
| -rw-r--r-- | gnu/dist/gcc/haifa-sched.c | 4 | ||||
| -rw-r--r-- | gnu/dist/gcc/regmove.c | 55 | ||||
| -rw-r--r-- | gnu/dist/gcc/tree.c | 1 | ||||
| -rw-r--r-- | gnu/dist/gcc/version.c | 2 |
7 files changed, 148 insertions, 18 deletions
diff --git a/gnu/dist/gcc/ChangeLog b/gnu/dist/gcc/ChangeLog index 20625e86aa1..e4ac7f4fc01 100644 --- a/gnu/dist/gcc/ChangeLog +++ b/gnu/dist/gcc/ChangeLog @@ -1,3 +1,62 @@ +Mon Aug 24 01:21:38 PDT 1998 Jeff Law (law@cygnus.com) + + * version.c: Bump for snapshot. + +Sun Aug 23 00:47:52 1998 Jeffrey A Law (law@cygnus.com) + + * regmove.c (optimize_reg_copy_3): Disable for egcs-1.1. + +Thu Aug 20 13:56:53 1998 Michael Meissner <meissner@cygnus.com> + + * config/i386/winnt.c: Include system.h, not stdio.h to get + sys/param.h pulled in before rtl.h in case the system defines MIN + and MAX. + +Wed Aug 19 21:33:19 1998 David Edelsohn <edelsohn@mhpcc.edu> + + * rs6000.c (rs6000_output_load_toc_table): Use ld for 64-bit. + (output_toc): Use single TOC slot or llong minimal-toc for DFmode + and DImode 64-bit. Use llong for minimal-toc SFmode and + SYMBOL_REF / LABEL_REF 64-bit. + (output_function_profiler): Use llong for profiler label and ld to + load 64-bit label address. + +Tue Aug 18 23:48:30 1998 Richard Henderson <rth@cygnus.com> + + * c-common.c (decl_attributes): Issue an error if the argument + to alias is not a string. + +Tue Aug 18 13:05:59 BST 1998 Richard Earnshaw (rearnsha@arm.com) + + * arm.c (arm_override_options): Remove lie about ignoring PIC flag. + +Tue Aug 18 10:32:11 1998 Jeffrey A Law (law@cygnus.com) + + * haifa-sched.c (sched_analyze): Put all JUMP_INSNs on the last + pending memory flush list. + + * regmove.c (fixup_match_2): Do not call reg_overlap_mentioned_p + on notes. + + * regmove.c (optimize_reg_copy_1): Update REG_N_CALLS_CROSSED + and REG_LIVE_LENGTH as successful substitutions are made. + +Mon Aug 17 21:07:19 1998 Jeffrey A Law (law@cygnus.com) + + * From Graham + * tree.c (build_index_type): Copy TYPE_SIZE_UNIT from sizetype + to itype. + * c-decl.c (finish_enum): Copy TYPE_SIZ_UNIT from enumtype to tem. + + * rs6000.c (secondary_reload_class): For TARGET_ELF, indicate that + a BASE_REGS register is needed as an intermediate when copying + a symbolic value into any register class other than BASE_REGS. + +Mon Aug 17 11:25:52 1998 Richard Earnshaw <rearnsha@arm.com> + + * arm.h (SECONDARY_INPUT_RELOAD_CLASS): Return NO_REGS if compiling + for architecture v4. + Sun Aug 16 00:57:48 PDT 1998 Jeff Law (law@cygnus.com) * version.c: Bump for snapshot. diff --git a/gnu/dist/gcc/cp/ChangeLog b/gnu/dist/gcc/cp/ChangeLog index ad847f4b839..c0b985cdbe4 100644 --- a/gnu/dist/gcc/cp/ChangeLog +++ b/gnu/dist/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +1998-08-17 Mark Mitchell <mark@markmitchell.com> + + * pt.c (check_explicit_specialization): Don't abort on bogus + explicit instantiations. + 1998-08-14 Jason Merrill <jason@yorick.cygnus.com> * rtti.c (get_tinfo_fn): Don't mess with the context for now. diff --git a/gnu/dist/gcc/cp/pt.c b/gnu/dist/gcc/cp/pt.c index 9c724314ccf..5c65140cbe7 100644 --- a/gnu/dist/gcc/cp/pt.c +++ b/gnu/dist/gcc/cp/pt.c @@ -1107,19 +1107,33 @@ check_explicit_specialization (declarator, decl, template_count, flags) if (ctype != NULL_TREE && TYPE_BEING_DEFINED (ctype)) { - /* Since finish_struct_1 has not been called yet, we - can't call lookup_fnfields. We note that this - template is a specialization, and proceed, letting - finish_struct fix this up later. */ - tree ti = perm_tree_cons (NULL_TREE, - TREE_OPERAND (declarator, 1), - NULL_TREE); - TI_PENDING_SPECIALIZATION_FLAG (ti) = 1; - DECL_TEMPLATE_INFO (decl) = ti; - /* This should not be an instantiation; explicit - instantiation directives can only occur at the top - level. */ - my_friendly_assert (!explicit_instantiation, 0); + if (!explicit_instantiation) + { + /* Since finish_struct_1 has not been called yet, we + can't call lookup_fnfields. We note that this + template is a specialization, and proceed, letting + finish_struct fix this up later. */ + tree ti = perm_tree_cons (NULL_TREE, + TREE_OPERAND (declarator, 1), + NULL_TREE); + TI_PENDING_SPECIALIZATION_FLAG (ti) = 1; + DECL_TEMPLATE_INFO (decl) = ti; + } + else + /* It's not legal to write an explicit instantiation in + class scope, e.g.: + + class C { template void f(); } + + This case is caught by the parser. However, on + something like: + + template class C { void f(); }; + + (which is illegal) we can get here. The error will be + issued later. */ + ; + return decl; } else if (ctype != NULL_TREE diff --git a/gnu/dist/gcc/haifa-sched.c b/gnu/dist/gcc/haifa-sched.c index 23a7865468e..0eebda9e38a 100644 --- a/gnu/dist/gcc/haifa-sched.c +++ b/gnu/dist/gcc/haifa-sched.c @@ -3813,6 +3813,10 @@ sched_analyze (head, tail) { if (GET_CODE (insn) == INSN || GET_CODE (insn) == JUMP_INSN) { + /* Make each JUMP_INSN a scheduling barrier for memory references. */ + if (GET_CODE (insn) == JUMP_INSN) + last_pending_memory_flush + = alloc_INSN_LIST (insn, last_pending_memory_flush); sched_analyze_insn (PATTERN (insn), insn, loop_notes); loop_notes = 0; } diff --git a/gnu/dist/gcc/regmove.c b/gnu/dist/gcc/regmove.c index def8c14d5c9..0a598912d50 100644 --- a/gnu/dist/gcc/regmove.c +++ b/gnu/dist/gcc/regmove.c @@ -288,12 +288,45 @@ optimize_reg_copy_1 (insn, dest, src) PATTERN (q)))) { /* We assume that a register is used exactly once per - insn in the updates below. If this is not correct, - no great harm is done. */ + insn in the REG_N_REFS updates below. If this is not + correct, no great harm is done. + + + We do not undo this substitution if something later + fails. Therefore, we must update the other REG_N_* + counters now to keep them accurate. */ if (sregno >= FIRST_PSEUDO_REGISTER) - REG_N_REFS (sregno) -= loop_depth; + { + REG_N_REFS (sregno) -= loop_depth; + + if (REG_LIVE_LENGTH (sregno) >= 0) + { + REG_LIVE_LENGTH (sregno) -= length; + /* REG_LIVE_LENGTH is only an approximation after + combine if sched is not run, so make sure that + we still have a reasonable value. */ + if (REG_LIVE_LENGTH (sregno) < 2) + REG_LIVE_LENGTH (sregno) = 2; + } + + REG_N_CALLS_CROSSED (sregno) -= n_calls; + } + if (dregno >= FIRST_PSEUDO_REGISTER) - REG_N_REFS (dregno) += loop_depth; + { + REG_N_REFS (dregno) += loop_depth; + + if (REG_LIVE_LENGTH (dregno) >= 0) + REG_LIVE_LENGTH (dregno) += d_length; + + REG_N_CALLS_CROSSED (dregno) += d_n_calls; + } + + /* We've done a substitution, clear the counters. */ + length = 0; + d_length = 0; + n_calls = 0; + d_n_calls = 0; } else { @@ -485,6 +518,18 @@ optimize_reg_copy_3 (insn, dest, src) rtx p, set, subreg; enum machine_mode old_mode; + /* This code has been disabled on the egcs-1.1 release branch due to + a potentially serious bug. + + In a nutshell, if we perform a series of substitutions, then have a + later substitution fail we will not be able to undo the previous + substitutions, leaving bogus RTL. + + A fix for this can be found in the mainline sources, but it did not + seem worth the trouble and potential problems to migrate the real + fix to the egcs-1.1 branch. */ + return; + if (src_no < FIRST_PSEUDO_REGISTER || dst_no < FIRST_PSEUDO_REGISTER || ! find_reg_note (insn, REG_DEAD, src_reg) @@ -790,6 +835,8 @@ fixup_match_2 (insn, dst, src, offset, regmove_dump_file) && (NOTE_LINE_NUMBER (p) == NOTE_INSN_LOOP_BEG || NOTE_LINE_NUMBER (p) == NOTE_INSN_LOOP_END))) break; + if (GET_RTX_CLASS (GET_CODE (p)) != 'i') + continue; if (reg_overlap_mentioned_p (dst, PATTERN (p))) { if (try_auto_increment (p, insn, 0, dst, newconst, 0)) diff --git a/gnu/dist/gcc/tree.c b/gnu/dist/gcc/tree.c index 1f6b5a66e72..d1e8b3419a6 100644 --- a/gnu/dist/gcc/tree.c +++ b/gnu/dist/gcc/tree.c @@ -4127,6 +4127,7 @@ build_index_type (maxval) TYPE_MODE (itype) = TYPE_MODE (sizetype); TYPE_SIZE (itype) = TYPE_SIZE (sizetype); + TYPE_SIZE_UNIT (itype) = TYPE_SIZE_UNIT (sizetype); TYPE_ALIGN (itype) = TYPE_ALIGN (sizetype); if (TREE_CODE (maxval) == INTEGER_CST) { diff --git a/gnu/dist/gcc/version.c b/gnu/dist/gcc/version.c index 30013adb803..b7803e1c901 100644 --- a/gnu/dist/gcc/version.c +++ b/gnu/dist/gcc/version.c @@ -1 +1 @@ -char *version_string = "egcs-2.91.54 19980816 (gcc2 ss-980609 experimental)"; +char *version_string = "egcs-2.91.55 19980824 (gcc2 ss-980609 experimental)"; |
