Bugfix import of egcs 1.1, 1998-08-24 snapshot.

This commit is contained in:
tv 1998-08-24 17:55:20 +00:00
parent 705363981e
commit 2da237ca1f
7 changed files with 148 additions and 18 deletions

View File

@ -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.

View File

@ -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.

40
gnu/dist/gcc/cp/pt.c vendored
View File

@ -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

View File

@ -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;
}

View File

@ -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))

1
gnu/dist/gcc/tree.c vendored
View File

@ -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)
{

View File

@ -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)";