summaryrefslogtreecommitdiff
path: root/gnu
diff options
context:
space:
mode:
authortv <tv@NetBSD.org>1998-08-24 17:55:20 +0000
committertv <tv@NetBSD.org>1998-08-24 17:55:20 +0000
commit2da237ca1fa07fcae179f4a65098995c16a15b8c (patch)
treef1ad7abd9f497efe5241816803b4f977ffdec17f /gnu
parent705363981e6a977cef7c77b5aa32f4a71a598350 (diff)
Bugfix import of egcs 1.1, 1998-08-24 snapshot.
Diffstat (limited to 'gnu')
-rw-r--r--gnu/dist/gcc/ChangeLog59
-rw-r--r--gnu/dist/gcc/cp/ChangeLog5
-rw-r--r--gnu/dist/gcc/cp/pt.c40
-rw-r--r--gnu/dist/gcc/haifa-sched.c4
-rw-r--r--gnu/dist/gcc/regmove.c55
-rw-r--r--gnu/dist/gcc/tree.c1
-rw-r--r--gnu/dist/gcc/version.c2
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)";