Bring in bug fixes from the GCC anoncvs server's "gcc-2_95-branch"

branch on Jan 20th, 2000.
This commit is contained in:
David E. O'Brien 2000-01-22 02:59:08 +00:00
parent 8107fa79b5
commit cbab320528
22 changed files with 223 additions and 97 deletions

View File

@ -1,3 +1,90 @@
Thu Jan 20 10:02:07 2000 Richard Henderson <rth@cygnus.com>
2000-01-03 Anthony Green <green@cygnus.com>
* config/i386/i386.md (builtin_setjmp_receiver): New pattern.
Restore the pic register if required.
Fri Jan 7 14:40:05 2000 Richard Henderson <rth@cygnus.com>
Thu Oct 28 18:06:50 1999 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* stmt.c (expand_value_return): Correctly convert VAL when promoting
function return.
Tue Jan 4 02:22:27 2000 Jeffrey A Law (law@cygnus.com)
Mon Oct 18 18:50:51 1999 Andreas Schwab <schwab@suse.de>
* config/m68k/m68k.h (INITIAL_FRAME_POINTER_OFFSET): Add one word
if the pic register is used.
Sat Sep 25 13:11:07 1999 Jeffrey A Law (law@cygnus.com)
* cse.c: Update comments.
(cse_insn): When converting a conditional/computed jump into
an unconditional jump, always make sure a BARRIER immediately
follows the converted jump. Do not delete unreachable code.
(cse_basic_block): Do not delete unreachable code.
* toplev.c (rest_of_compilation): Move call to
delete_trivially_dead_insns after the conditional call to
jump_optimize.
Wed Dec 29 22:47:43 1999 Jeffrey A Law (law@cygnus.com)
1999-12-12 Stephen L Moshier <moshier@mediaone.net>
* loop.c (load_mems): Don't hoist written floating point mem
if -ffloat-store.
* cppinit.c (is_idchar): Only use special initialization for
gcc-2.8 and later versions of the compiler.
Wed Oct 27 01:42:26 1999 Scott Christley <scottc@net-community.com>
* sparc.md (call): Don't bound structure return size to 0xfff.
Mon Dec 27 07:32:59 1999 Jeffrey A Law (law@cygnus.com)
Fri Sep 3 10:16:37 HST 1999 Glen Nakamura <glen.nakamura@usa.net>
* cccp.c (rescan): Fixed obp pointer handling around call to
check_expand subroutine.
Thu Sep 16 00:46:35 1999 Geoff Keating <geoffk@cygnus.com>
* loop.c (basic_induction_var): A non-integer variable which is
being set by a paradoxical subreg is probably not a biv.
1999-08-31 12:20 -0700 Zack Weinberg <zack@bitmover.com>
* loop.c (check_dbra_loop): Check bl->biv->add_val is a
CONST_INT before using its INTVAL.
Tue Nov 2 15:27:31 1999 Alexandre Oliva <oliva@lsd.ic.unicamp.br>
* configure.in (m68k-hp-hpux*, xm_alloca.h): The underscore should
have been an hyphen, fixed.
* configure: Rebuilt.
Thu Dec 23 11:59:56 1999 Jeffrey A Law (law@cygnus.com)
1999-12-23 Martin v. Löwis <loewis@informatik.hu-berlin.de>
* fold-const.c (operand_equal_p): Use memcmp to compare string
constants.
Suggested by D. J. Bernstein
Thu Dec 16 02:26:11 1999 Jeffrey A Law (law@cygnus.com)
* h8300.md (HImode preinc peephole): Fix typo.
1999-12-14 Bernd Schmidt <bernds@cygnus.co.uk>
* loop.c (check_dbra_loop): Can't reverse a biv that has
maybe_multiple set.
1999-12-07 Martin v. Löwis <loewis@informatik.hu-berlin.de>
* invoke.texi (C Dialect Options): Remove -flang-c9x, add -std
documentation.
Sun Oct 31 22:32:17 1999 Alexandre Oliva <oliva@lsd.ic.unicamp.br>
* config/i386/sol2gas.h: I had installed the wrong version of Sept
22's patch in the release branch. Fixed.
* configure.in: Likewise.
* configure: Rebuilt.
Reported by Jason Beardsley <jbeardsley@origin.ea.com>
Sun Oct 24 23:54:10 PDT 1999 Jeff Law (law@cygnus.com)
* gcc-2.95.2 Released.

View File

@ -3299,7 +3299,9 @@ do { ip = &instack[indepth]; \
#endif
if (output_marks) {
op->bufp = obp;
check_expand (op, limit - ibp + 2);
obp = op->bufp;
*obp++ = '\n';
*obp++ = '-';
}

View File

@ -4,8 +4,6 @@
Copyright (C) 1999 Free Software Foundation, Inc.
*/
#ifndef GAS_DOES_NOT_SUPPORT_MINUS_S
#define GAS_DOES_NOT_SUPPORT_MINUS_S 1
#ifndef GAS_REJECTS_MINUS_S
#define GAS_REJECTS_MINUS_S 1
#endif
#include "i386/sol2.h"

View File

@ -7355,7 +7355,7 @@
gen_rtvec (3,
gen_rtx_SET (VOIDmode, pc_rtx,
XEXP (operands[0], 0)),
GEN_INT (INTVAL (operands[3]) & 0xfff),
operands[3],
gen_rtx_CLOBBER (VOIDmode,
gen_rtx_REG (Pmode, 15)))));
else
@ -7387,7 +7387,7 @@
emit_call_insn
(gen_rtx_PARALLEL (VOIDmode,
gen_rtvec (3, gen_rtx_CALL (VOIDmode, fn_rtx, nregs_rtx),
GEN_INT (INTVAL (operands[3]) & 0xfff),
operands[3],
gen_rtx_CLOBBER (VOIDmode,
gen_rtx_REG (Pmode, 15)))));
else

View File

@ -1399,11 +1399,10 @@ changequote(,)dnl
changequote([,])dnl
xm_file="xm-siglist.h xm-alloca.h ${xm_file}"
xm_defines="USG POSIX SMALL_ARG_MAX"
tm_file=i386/sol2.h
if test x$gas = xyes; then
# Only needed if gas does not support -s
tm_file=i386/sol2gas.h
else
tm_file=i386/sol2.h
tm_file="i386/sol2gas.h ${tm_file}"
fi
tmake_file=i386/t-sol2
extra_parts="crt1.o crti.o crtn.o gcrt1.o gmon.o crtbegin.o crtend.o"
@ -1689,7 +1688,7 @@ changequote([,])dnl
extra_headers=math-68881.h
;;
m68000-hp-hpux*) # HP 9000 series 300
xm_file="xm_alloca.h ${xm_file}"
xm_file="xm-alloca.h ${xm_file}"
xm_defines="USG NO_SYS_SIGLIST"
if test x$gas = xyes
then
@ -1890,7 +1889,7 @@ changequote([,])dnl
extra_headers=math-68881.h
;;
m68k-hp-hpux7*) # HP 9000 series 300 running HPUX version 7.
xm_file="xm_alloca.h ${xm_file}"
xm_file="xm-alloca.h ${xm_file}"
xm_defines="USG NO_SYS_SIGLIST"
if test x$gas = xyes
then
@ -1906,7 +1905,7 @@ changequote([,])dnl
float_format=m68k
;;
m68k-hp-hpux*) # HP 9000 series 300
xm_file="xm_alloca.h ${xm_file}"
xm_file="xm-alloca.h ${xm_file}"
xm_defines="USG NO_SYS_SIGLIST"
if test x$gas = xyes
then

View File

@ -1,3 +1,8 @@
1999-11-01 Jason Merrill <jason@yorick.cygnus.com>
* decl2.c (maybe_make_one_only): Always make things comdat on
ELF targets, too.
Sun Oct 24 23:54:10 PDT 1999 Jeff Law (law@cygnus.com)
* gcc-2.95.2 Released.

View File

@ -2485,9 +2485,13 @@ void
maybe_make_one_only (decl)
tree decl;
{
/* This is not necessary on targets that support weak symbols, because
the implicit instantiations will defer to the explicit one. */
if (! supports_one_only () || SUPPORTS_WEAK)
/* We used to say that this was not necessary on targets that support weak
symbols, because the implicit instantiations will defer to the explicit
one. However, that's not actually the case in SVR4; a strong definition
after a weak one is an error. Also, not making explicit
instantiations one_only means that we can end up with two copies of
some template instantiations. */
if (! supports_one_only ())
return;
/* We can't set DECL_COMDAT on functions, or finish_file will think

View File

@ -210,7 +210,7 @@ enum { QUOTE = 0, BRACKET, SYSTEM, AFTER };
/* If gcc is in use (stage2/stage3) we can make these tables initialized
data. */
#if defined __GNUC__ && (__GNUC__ > 2 \
|| (__GNUC__ == 2 && __GNUC_MINOR__ > 6))
|| (__GNUC__ == 2 && __GNUC_MINOR__ > 8))
/* Table to tell if a character is legal as the second or later character
of a C identifier. */
U_CHAR is_idchar[256] =

View File

@ -1,5 +1,5 @@
/* Common subexpression elimination for GNU compiler.
Copyright (C) 1987, 88, 89, 92-7, 1998, 1999 Free Software Foundation, Inc.
Copyright (C) 1987, 88, 89, 92-99, 2000 Free Software Foundation, Inc.
This file is part of GNU CC.
@ -42,12 +42,14 @@ Boston, MA 02111-1307, USA. */
expressions encountered with the cheapest equivalent expression.
It is too complicated to keep track of the different possibilities
when control paths merge; so, at each label, we forget all that is
known and start fresh. This can be described as processing each
basic block separately. Note, however, that these are not quite
the same as the basic blocks found by a later pass and used for
data flow analysis and register packing. We do not need to start fresh
after a conditional jump instruction if there is no label there.
when control paths merge in this code; so, at each label, we forget all
that is known and start fresh. This can be described as processing each
extended basic block separately. We have a separate pass to perform
global CSE.
Note CSE can turn a conditional or computed jump into a nop or
an unconditional jump. When this occurs we arrange to run the jump
optimizer after CSE to delete the unreachable code.
We use two data structures to record the equivalent expressions:
a hash table for most expressions, and several vectors together
@ -7468,7 +7470,6 @@ cse_insn (insn, libcall_insn)
rtx new = emit_jump_insn_before (gen_jump (XEXP (src, 0)), insn);
JUMP_LABEL (new) = XEXP (src, 0);
LABEL_NUSES (XEXP (src, 0))++;
delete_insn (insn);
insn = new;
}
else
@ -7479,42 +7480,11 @@ cse_insn (insn, libcall_insn)
Until the right place is found, might as well do this here. */
INSN_CODE (insn) = -1;
/* Now that we've converted this jump to an unconditional jump,
there is dead code after it. Delete the dead code until we
reach a BARRIER, the end of the function, or a label. Do
not delete NOTEs except for NOTE_INSN_DELETED since later
phases assume these notes are retained. */
p = insn;
while (NEXT_INSN (p) != 0
&& GET_CODE (NEXT_INSN (p)) != BARRIER
&& GET_CODE (NEXT_INSN (p)) != CODE_LABEL)
{
/* Note, we must update P with the return value from
delete_insn, otherwise we could get an infinite loop
if NEXT_INSN (p) had INSN_DELETED_P set. */
if (GET_CODE (NEXT_INSN (p)) != NOTE
|| NOTE_LINE_NUMBER (NEXT_INSN (p)) == NOTE_INSN_DELETED)
p = PREV_INSN (delete_insn (NEXT_INSN (p)));
else
p = NEXT_INSN (p);
}
/* If we don't have a BARRIER immediately after INSN, put one there.
Much code assumes that there are no NOTEs between a JUMP_INSN and
BARRIER. */
if (NEXT_INSN (insn) == 0
|| GET_CODE (NEXT_INSN (insn)) != BARRIER)
emit_barrier_before (NEXT_INSN (insn));
/* We might have two BARRIERs separated by notes. Delete the second
one if so. */
if (p != insn && NEXT_INSN (p) != 0
&& GET_CODE (NEXT_INSN (p)) == BARRIER)
delete_insn (NEXT_INSN (p));
/* Now emit a BARRIER after the unconditional jump. Do not bother
deleting any unreachable code, let jump/flow do that. */
if (NEXT_INSN (insn) != 0
&& GET_CODE (NEXT_INSN (insn)) != BARRIER)
emit_barrier_after (insn);
cse_jumps_altered = 1;
sets[i].rtl = 0;
@ -9007,9 +8977,6 @@ cse_basic_block (from, to, next_branch, around_loop)
insn = NEXT_INSN (to);
if (LABEL_NUSES (to) == 0)
insn = delete_insn (to);
/* If TO was the last insn in the function, we are done. */
if (insn == 0)
return 0;

View File

@ -2131,7 +2131,7 @@ operand_equal_p (arg0, arg1, only_const)
case STRING_CST:
return (TREE_STRING_LENGTH (arg0) == TREE_STRING_LENGTH (arg1)
&& ! strncmp (TREE_STRING_POINTER (arg0),
&& ! memcmp (TREE_STRING_POINTER (arg0),
TREE_STRING_POINTER (arg1),
TREE_STRING_LENGTH (arg0)));

View File

@ -93,7 +93,7 @@ in the following sections.
@item C Language Options
@xref{C Dialect Options,,Options Controlling C Dialect}.
@smallexample
-ansi -flang-isoc9x -fallow-single-precision -fcond-mismatch -fno-asm
-ansi -fstd -fallow-single-precision -fcond-mismatch -fno-asm
-fno-builtin -ffreestanding -fhosted -fsigned-bitfields -fsigned-char
-funsigned-bitfields -funsigned-char -fwritable-strings
-traditional -traditional-cpp -trigraphs
@ -667,14 +667,37 @@ programs that might use these names for other things.
The functions @code{alloca}, @code{abort}, @code{exit}, and
@code{_exit} are not builtin functions when @samp{-ansi} is used.
@item -flang-isoc9x
Enable support for features found in the C9X standard. In particular,
enable support for the C9X @code{restrict} keyword.
@item -fstd=
Determine the language standard. A value for this option must be provided;
possible values are
Even when this option is not specified, you can still use some C9X
features in so far as they do not conflict with previous C standards.
For example, you may use @code{__restrict__} even when -flang-isoc9x
is not specified.
@itemize @minus
@item iso9899:1990
Same as -ansi
@item iso9899:199409
ISO C as modified in amend. 1
@item iso9899:199x
ISO C 9x
@item c89
same as -std=iso9899:1990
@item c9x
same as -std=iso9899:199x
@item gnu89
default, iso9899:1990 + gnu extensions
@item gnu9x
iso9899:199x + gnu extensions
@end itemize
Even when this option is not specified, you can still use some of the
features of newer standards in so far as they do not conflict with
previous C standards. For example, you may use @code{__restrict__} even
when -fstd=c9x is not specified.
@item -fno-asm
Do not recognize @code{asm}, @code{inline} or @code{typeof} as a

View File

@ -5998,6 +5998,8 @@ basic_induction_var (x, mode, dest_reg, p, inc_val, mult_val, location)
|| (GET_CODE (SET_DEST (set)) == SUBREG
&& (GET_MODE_SIZE (GET_MODE (SET_DEST (set)))
<= UNITS_PER_WORD)
&& (GET_MODE_CLASS (GET_MODE (SET_DEST (set)))
== MODE_INT)
&& SUBREG_REG (SET_DEST (set)) == x))
&& basic_induction_var (SET_SRC (set),
(GET_MODE (SET_SRC (set)) == VOIDmode
@ -7696,6 +7698,7 @@ check_dbra_loop (loop_end, insn_count, loop_start, loop_info)
for (bl = loop_iv_list; bl; bl = bl->next)
{
if (bl->biv_count == 1
&& ! bl->biv->maybe_multiple
&& bl->biv->dest_reg == XEXP (comparison, 0)
&& ! reg_used_between_p (regno_reg_rtx[bl->regno], bl->biv->insn,
first_compare))
@ -7761,7 +7764,8 @@ check_dbra_loop (loop_end, insn_count, loop_start, loop_info)
}
}
}
else if (INTVAL (bl->biv->add_val) > 0)
else if (GET_CODE (bl->biv->add_val) == CONST_INT
&& INTVAL (bl->biv->add_val) > 0)
{
/* Try to change inc to dec, so can apply above optimization. */
/* Can do this if:
@ -9551,6 +9555,10 @@ load_mems (scan_start, end, loop_top, start)
mem_list_entry = XEXP (mem_list_entry, 1);
}
if (flag_float_store && written
&& GET_MODE_CLASS (GET_MODE (mem)) == MODE_FLOAT)
loop_mems[i].optimize = 0;
/* If this MEM is written to, we must be sure that there
are no reads from another MEM that aliases this one. */
if (loop_mems[i].optimize && written)

View File

@ -2511,15 +2511,15 @@ expand_value_return (val)
#ifdef PROMOTE_FUNCTION_RETURN
tree type = TREE_TYPE (DECL_RESULT (current_function_decl));
int unsignedp = TREE_UNSIGNED (type);
enum machine_mode old_mode
= DECL_MODE (DECL_RESULT (current_function_decl));
enum machine_mode mode
= promote_mode (type, DECL_MODE (DECL_RESULT (current_function_decl)),
&unsignedp, 1);
= promote_mode (type, old_mode, &unsignedp, 1);
if (GET_MODE (val) != VOIDmode && GET_MODE (val) != mode)
convert_move (return_reg, val, unsignedp);
else
if (mode != old_mode)
val = convert_modes (mode, old_mode, val, unsignedp);
#endif
emit_move_insn (return_reg, val);
emit_move_insn (return_reg, val);
}
if (GET_CODE (return_reg) == REG
&& REGNO (return_reg) < FIRST_PSEUDO_REGISTER)

View File

@ -1,3 +1,14 @@
1999-12-21 Martin v. Löwis <loewis@informatik.hu-berlin.de>
* filebuf.cc (open): Support ios::ate if _G_HAVE_IO_FILE_OPEN.
Remove seek for ios::app if not.
1999-12-14 Martin v. Löwis <loewis@informatik.hu-berlin.de>
* strstream.h (strstreambuf::streambuf): Rename parameters to
avoid shadow warning.
* stream.h (WS): Likewise.
Sun Oct 24 23:54:10 PDT 1999 Jeff Law (law@cygnus.com)
* gcc-2.95.2 Released.

View File

@ -1,5 +1,5 @@
/* This is part of libio/iostream, providing -*- C++ -*- input/output.
Copyright (C) 1993, 1995 Free Software Foundation
Copyright (C) 1993, 1995, 1999 Free Software Foundation
This file is part of the GNU IO Library. This library is free
software; you can redistribute it and/or modify it under the
@ -112,15 +112,23 @@ filebuf* filebuf::open(const char *filename, ios::openmode mode, int prot)
if (mode & (int)ios::noreplace)
posix_mode |= O_EXCL;
#if _G_HAVE_IO_FILE_OPEN
return (filebuf*)_IO_file_open (this, filename, posix_mode, prot,
read_write, 0);
if (!_IO_file_open (this, filename, posix_mode, prot,
read_write, 0))
return NULL;
if (mode & ios::ate) {
if (pubseekoff(0, ios::end) == EOF) {
_IO_un_link (this);
return NULL;
}
}
return this;
#else
int fd = ::open(filename, posix_mode, prot);
if (fd < 0)
return NULL;
_fileno = fd;
xsetflags(read_write, _IO_NO_READS+_IO_NO_WRITES+_IO_IS_APPENDING);
if (mode & (ios::ate|ios::app)) {
if (mode & ios::ate) {
if (pubseekoff(0, ios::end) == EOF)
return NULL;
}

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 1993 Free Software Foundation
Copyright (C) 1993, 1999 Free Software Foundation
This file is part of the GNU IO Library. This library is free
software; you can redistribute it and/or modify it under the
@ -53,7 +53,7 @@ extern char* oct(unsigned int, int=0);
char* chr(char ch, int width = 0);
char* str(const char* s, int width = 0);
inline istream& WS(istream& str) { return ws(str); }
inline istream& WS(istream& __str) { return ws(__str); }
} // extern "C++"
#endif /* !_COMPAT_STREAM_H */

View File

@ -1,5 +1,5 @@
/* This is part of libio/iostream, providing -*- C++ -*- input/output.
Copyright (C) 1993 Free Software Foundation
Copyright (C) 1993, 1999 Free Software Foundation
This file is part of the GNU IO Library. This library is free
software; you can redistribute it and/or modify it under the
@ -50,8 +50,8 @@ class strstreambuf : public streambuf
virtual ~strstreambuf();
strstreambuf() { init_dynamic(0, 0); }
strstreambuf(int initial_size) { init_dynamic(0, 0, initial_size); }
strstreambuf(void *(*alloc)(_IO_size_t), void (*free)(void*))
{ init_dynamic(alloc, free); }
strstreambuf(void *(*__alloc)(_IO_size_t), void (*__free)(void*))
{ init_dynamic(__alloc, __free); }
strstreambuf(char *ptr, int size, char *pstart = NULL)
{ init_static(ptr, size, pstart); }
strstreambuf(unsigned char *ptr, int size, unsigned char *pstart = NULL)

View File

@ -1,3 +1,9 @@
1999-12-14 Martin v. Löwis <loewis@informatik.hu-berlin.de>
* std/bastring.h (basic_string::basic_string): Rename parameters
to avoid shadow warnings.
* std/bastring.cc (alloc): Likewise.
Sun Oct 24 23:54:10 PDT 1999 Jeff Law (law@cygnus.com)
* gcc-2.95.2 Released.

View File

@ -1,5 +1,5 @@
// Member templates for the -*- C++ -*- string classes.
// Copyright (C) 1994 Free Software Foundation
// Copyright (C) 1994, 1999 Free Software Foundation
// This file is part of the GNU ANSI C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@ -94,14 +94,14 @@ check_realloc (basic_string::size_type s) const
template <class charT, class traits, class Allocator>
void basic_string <charT, traits, Allocator>::
alloc (basic_string::size_type size, bool save)
alloc (basic_string::size_type __size, bool __save)
{
if (! check_realloc (size))
if (! check_realloc (__size))
return;
Rep *p = Rep::create (size);
Rep *p = Rep::create (__size);
if (save)
if (__save)
{
p->copy (0, data (), length ());
p->len = length ();

View File

@ -1,5 +1,5 @@
// Main templates for the -*- C++ -*- string classes.
// Copyright (C) 1994, 1995 Free Software Foundation
// Copyright (C) 1994, 1995, 1999 Free Software Foundation
// This file is part of the GNU ANSI C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@ -180,11 +180,11 @@ class basic_string
: dat (nilRep.grab ()) { assign (n, c); }
#ifdef __STL_MEMBER_TEMPLATES
template<class InputIterator>
basic_string(InputIterator begin, InputIterator end)
basic_string(InputIterator __begin, InputIterator __end)
#else
basic_string(const_iterator begin, const_iterator end)
basic_string(const_iterator __begin, const_iterator __end)
#endif
: dat (nilRep.grab ()) { assign (begin, end); }
: dat (nilRep.grab ()) { assign (__begin, __end); }
~basic_string ()
{ rep ()->release (); }

View File

@ -1,3 +1,8 @@
1999-11-06 Martin v. Löwis <loewis@informatik.hu-berlin.de>
* bitset (class bitset): Declare reference as our friend.
* bitset: Include limits.h.
Sun Oct 24 23:54:10 PDT 1999 Jeff Law (law@cygnus.com)
* gcc-2.95.2 Released.

View File

@ -36,6 +36,7 @@
#include <stddef.h> // for size_t
#include <limits.h> // for CHAR_BIT
#include <string>
#include <stdexcept> // for invalid_argument, out_of_range, overflow_error
#include <iostream.h> // for istream, ostream
@ -568,6 +569,8 @@ private:
public:
// bit reference:
class reference;
friend class reference;
class reference {
friend class bitset;