Import of 2.7.2.1 into vendor branch

This commit is contained in:
Peter Wemm 1996-09-18 05:45:16 +00:00
parent a4cd5630b0
commit 9882643d04
18 changed files with 310 additions and 158 deletions

View File

@ -1,3 +1,118 @@
Sat Jun 29 12:33:39 1996 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* Version 2.7.2.1 released.
Tue Jun 11 20:18:03 1996 Per Bothner <bothner@cygnus.com>
* fix-header.c (read_scna_file): Invoke FIXPROTO_INIT if defined.
* alpha.h (FIXPROTO_INIT): Define new macro.
Fri May 10 18:35:00 1996 Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
* loop.c (maybe_eliminate_biv_1): Disable all but two cases
of biv elimination with givs and restrict those two cases to
an ADD_VAL that is an address.
Mon Apr 22 16:50:19 1996 Jeremy Bettis <jeremy@hksys.com>
* objc/hash.c (hash_value_for_key): Prevent endless loop when 0 was
stored in a hashtable.
Wed Apr 17 17:53:23 1996 Michael Meissner <meissner@tiktok.cygnus.com>
* rs6000.c (expand_block_move_mem): Copy RTX_UNCHANGING_P.
(expand_block_move): Copy dest/src to registers using
copy_addr_to_reg, call expand_block_move_mem to copy all of the
bits.
Mon Apr 8 13:46:28 1996 Michael Meissner <meissner@tiktok.cygnus.com>
* rs6000.c (output_{prolog,epilog}): For V.4/eabi systems, change
prologue and epilogue so that accesses beyond the current stack
pointer are not done like they are for AIX.
Fri Mar 26 05:43:06 1996 Torbjorn Granlund <tege@noisy.matematik.su.se>
* vax.md (insv matcher): Call CC_STATUS_INIT.
* vax.h (NOTICE_UPDATE_CC): Handle ZERO_EXTRACT destination.
Sat Mar 23 18:25:39 1996 J"orn Rennecke (amylaar@meolyon.hanse.de)
* c-typeck.c (set_init_index): Check for use outside an array
initializer.
Sat Mar 23 09:21:40 1996 Doug Evans <dje@canuck.cygnus.com>
* sparc/sparc.h (CONDITIONAL_REGISTER_USAGE): Don't unfix %g[234]
if fixed with -ffixed-.
Wed Mar 13 20:36:10 1996 Jim Wilson <wilson@chestnut.cygnus.com>
* mips.c (mips_expand_prologue): Change TYPE_NEEDS_CONSTRUCTING to
TREE_ADDRESSABLE;
* pa.h (ASM_DECLARE_FUNCTION_NAME): Likewise.
Tue Mar 12 14:36:02 1996 Jason Merrill <jason@yorick.cygnus.com>
* lex.c (real_yylex): Warn about using the `namespace' keyword.
Tue Feb 27 08:18:12 1996 Richard Earnshaw (rearnsha@armltd.co.uk)
* arm.md (mov{si,sf,df}cc and matchers): All conditional move
patterns must have a mode.
Mon Feb 19 07:35:07 1996 Torbjorn Granlund <tege@tmg.se>
* rs6000.md (not:SI with assign and compare): Fix typo.
Wed Jan 24 18:00:12 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
* alpha.c (alpha_write_verstamp): Only emit MS_STAMP and LS_STAMP,
not the extra numbers.
Wed Jan 17 21:22:40 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
* cp/decl2.c (grokfield): Call cplus_decl_attributes with the attrlist.
Pass a null tree to grokdeclarator for its ATTRLIST arg, since it's
only ever used for functions in it.
Tue Jan 16 06:01:28 1996 Thomas Graichen <graichen@omega.physik.fu-berlin.de>
* i386/freebsd.h (ASM_WEAKEN_LABEL): Deleted; not supported.
Sun Jan 7 17:11:11 1996 David Edelsohn <edelsohn@mhpcc.edu>
* collect2.c (scan_libraries): Correct Import File ID interpretation.
Thu Dec 28 22:24:53 1995 Michael Meissner <meissner@tiktok.cygnus.com>
* rs6000.md (common mode functions): Add condition reg clobbers.
Tue Dec 19 15:08:31 1995 Jason Merrill <jason@yorick.cygnus.com>
* collect2.c: Remove auto_export functionality.
Mon Dec 18 18:40:34 1995 Jim Wilson <wilson@chestnut.cygnus.com>
* svr4.h (ASM_IDENTIFY_GCC): Don't output stab here.
(ASM_IDENTIFY_GCC_AFTER_SOURCE): Output stab here instead of
above.
Sat Dec 16 07:03:33 1995 Philippe De Muyter (phdm@info.ucl.ac.be)
* stor-layout.c (layout_record): When PCC_BITFIELD_TYPE_MATTERS,
compute bitpos using field_size % type_align instead of field_size.
Fri Dec 15 18:41:50 1995 Philippe De Muyter (phdm@info.ucl.ac.be)
* fixincludes (sys/wait.h): Add forward declaration of struct rusage
on AIX 3.2.5.
Sat Dec 9 18:05:03 1995 Jim Wilson <wilson@cygnus.com>
* expr.c (expand_expr, case INDIRECT_REF): Correct typo in May 8
change.
Sun Nov 26 14:47:42 1995 Richard Kenner <kenner@mole.gnu.ai.mit.edu>
* Version 2.7.2 released.

View File

@ -1,3 +1,7 @@
Noteworthy changes in GCC version 2.7.2.1:
This release fixes some serious bugs discovered since the 2.7.2 release.
Noteworthy changes in GCC version 2.7.2:
A few bugs have been fixed (most notably the generation of an

View File

@ -5723,6 +5723,8 @@ set_init_index (first, last)
error_init ("nonconstant array index in initializer%s", " for `%s'", NULL);
else if (last != 0 && TREE_CODE (last) != INTEGER_CST)
error_init ("nonconstant array index in initializer%s", " for `%s'", NULL);
else if (! constructor_unfilled_index)
error_init ("array index in non-array initializer%s", " for `%s'", NULL);
else if (tree_int_cst_lt (first, constructor_unfilled_index))
error_init ("duplicate array index in initializer%s", " for `%s'", NULL);
else

View File

@ -255,7 +255,6 @@ static char *temp_filename; /* Base of temp filenames */
static char *c_file; /* <xxx>.c for constructor/destructor list. */
static char *o_file; /* <xxx>.o for constructor/destructor list. */
static char *export_file; /* <xxx>.x for AIX export list. */
static int auto_export = 1; /* true if exporting everything. */
char *ldout; /* File for ld errors. */
static char *output_file; /* Output file for ld. */
static char *nm_file_name; /* pathname of nm */
@ -1243,15 +1242,6 @@ main (argc, argv)
}
break;
#ifdef COLLECT_EXPORT_LIST
case 'b':
if ((!strncmp (arg, "-bE:", 4)
|| !strncmp (arg, "-bexport:", 9))
&& strcmp (arg, "-bexport:/usr/lib/libg.exp"))
auto_export = 0;
break;
#endif
case 'l':
if (first_file)
{
@ -2554,8 +2544,6 @@ scan_prog_file (prog_name, which_pass)
break;
default: /* not a constructor or destructor */
if (which_pass == PASS_OBJ && auto_export)
add_to_list (&exports, name);
continue;
}
@ -2606,62 +2594,72 @@ scan_libraries (prog_name)
{
LDHDR ldh;
char *impbuf;
int idx;
int entry;
FSEEK (ldptr, ldsh.s_scnptr, BEGINNING);
FREAD (&ldh, sizeof ldh, 1, ldptr);
FREAD (&ldh, sizeof (ldh), 1, ldptr);
/* read import library list */
impbuf = alloca (ldh.l_istlen);
FSEEK (ldptr, ldh.l_impoff + ldsh.s_scnptr, BEGINNING);
FREAD (impbuf, ldh.l_istlen, 1, ldptr);
idx = strlen (impbuf) + 1;
idx += strlen (impbuf+idx) + 1;
if (debug)
fprintf (stderr, "LIBPATH=%s\n", impbuf);
prefix_from_string (impbuf, &libpath);
while (idx < ldh.l_istlen)
/* skip LIBPATH and empty base and member fields */
impbuf += strlen (impbuf) + 3;
for (entry = 1; entry < ldh.l_nimpid; ++entry)
{
char *implib = impbuf + idx;
char *impath = impbuf;
char *implib = impath + strlen (impath) + 1;
char *impmem = implib + strlen (implib) + 1;
char *soname = 0;
char *soname = NULL;
char *trial;
int pathlen;
LDFILE *libptr = NULL;
struct prefix_list *pl;
ARCHDR ah;
idx += strlen (implib) + 1;
if (!implib[0])
impbuf = impmem + strlen (impmem) + 1;
if (debug)
fprintf (stderr, "PATH+BASE=%s%s\n", impath, implib);
/* Skip AIX kernel exports */
if (*impath == '/' && *(impath+1) == '\0'
&& strcmp (implib, "unix") == 0)
continue;
idx += strlen (impmem) + 1;
if (*implib == '/')
pathlen = strlen (impath);
trial = alloca (MAX (pathlen + 1, libpath.max_len)
+ strlen (implib) + 1);
if (*impath)
{
if (access (soname, R_OK) == 0)
soname = implib;
strcpy (trial, impath);
if (impath[pathlen - 1] != '/')
trial[pathlen++] = '/';
strcpy (trial + pathlen, implib);
if (access (trial, R_OK) == 0)
soname = trial;
}
else
{
char *temp = alloca (libpath.max_len + strlen (implib) + 1);
for (pl = libpath.plist; pl; pl = pl->next)
{
strcpy (temp, pl->prefix);
strcat (temp, implib);
if (access (temp, R_OK) == 0)
{
soname = temp;
break;
}
}
}
if (!soname)
{
fatal ("%s: library not found", implib);
continue;
}
for (pl = libpath.plist; pl; pl = pl->next)
{
strcpy (trial, pl->prefix);
strcat (trial, implib);
if (access (trial, R_OK) == 0)
{
soname = trial;
break;
}
}
if (! soname)
fatal ("%s: library not found", implib);
if (debug)
{
if (impmem[0])
fprintf (stderr, "%s (%s)\n", soname, impmem);
else
fprintf (stderr, "%s\n", soname);
}
ah.ar_name[0] = 0;
if (*impmem)
fprintf (stderr, "%s (%s)\n", soname, impmem);
else
fprintf (stderr, "%s\n", soname);
do
{
/* scan imported shared objects for GCC GLOBAL ctors */
@ -2671,7 +2669,7 @@ scan_libraries (prog_name)
if (TYPE (libptr) == ARTYPE)
{
LDFILE *memptr;
if (!impmem[0])
if (! *impmem)
fatal ("%s: no archive member specified", soname);
ldahread (libptr, &ah);
if (strcmp (ah.ar_name, impmem))
@ -2688,12 +2686,12 @@ scan_libraries (prog_name)
if (!ldnshread (libptr, _LOADER, &soldsh))
fatal ("%s: not an import library", soname);
FSEEK (libptr, soldsh.s_scnptr, BEGINNING);
if (FREAD (&soldh, sizeof soldh, 1, libptr) != 1)
if (FREAD (&soldh, sizeof (soldh), 1, libptr) != 1)
fatal ("%s: can't read loader section", soname);
/*fprintf (stderr, "\tscanning %s\n", soname);*/
symcnt = soldh.l_nsyms;
lsyms = (LDSYM*) alloca (symcnt * sizeof *lsyms);
symcnt = FREAD (lsyms, sizeof *lsyms, symcnt, libptr);
lsyms = (LDSYM*) alloca (symcnt * sizeof (*lsyms));
symcnt = FREAD (lsyms, sizeof (*lsyms), symcnt, libptr);
ldstrings = alloca (soldh.l_stlen);
FSEEK (libptr, soldsh.s_scnptr+soldh.l_stoff, BEGINNING);
FREAD (ldstrings, soldh.l_stlen, 1, libptr);

View File

@ -120,12 +120,6 @@ Boston, MA 02111-1307, USA. */
#define TYPE_ASM_OP ".type"
#define SIZE_ASM_OP ".size"
/* This is how we tell the assembler that a symbol is weak. */
#define ASM_WEAKEN_LABEL(FILE,NAME) \
do { fputs ("\t.weak\t", FILE); assemble_name (FILE, NAME); \
fputc ('\n', FILE); } while (0)
/* The following macro defines the format used to output the second
operand of the .type assembler directive. Different svr4 assemblers
expect various different forms for this operand. The one given here

View File

@ -120,12 +120,6 @@ Boston, MA 02111-1307, USA. */
#define TYPE_ASM_OP ".type"
#define SIZE_ASM_OP ".size"
/* This is how we tell the assembler that a symbol is weak. */
#define ASM_WEAKEN_LABEL(FILE,NAME) \
do { fputs ("\t.weak\t", FILE); assemble_name (FILE, NAME); \
fputc ('\n', FILE); } while (0)
/* The following macro defines the format used to output the second
operand of the .type assembler directive. Different svr4 assemblers
expect various different forms for this operand. The one given here

View File

@ -273,15 +273,23 @@ do { \
#define DBX_BLOCKS_FUNCTION_RELATIVE 1
/* When using stabs, gcc2_compiled must be a stabs entry, not an
ordinary symbol, or gdb won't see it. The stabs entry must be
before the N_SO in order for gdb to find it. */
ordinary symbol, or gdb won't see it. Furthermore, since gdb reads
the input piecemeal, starting with each N_SO, it's a lot easier if
the gcc2 flag symbol is *after* the N_SO rather than before it. So
we emit an N_OPT stab there. */
#define ASM_IDENTIFY_GCC(FILE) \
do \
{ \
if (write_symbols != DBX_DEBUG) \
fputs ("gcc2_compiled.:\n", FILE); \
else \
} \
while (0)
#define ASM_IDENTIFY_GCC_AFTER_SOURCE(FILE) \
do \
{ \
if (write_symbols == DBX_DEBUG) \
fputs ("\t.stabs\t\"gcc2_compiled.\", 0x3c, 0, 0, 0\n", FILE); \
} \
while (0)

View File

@ -1363,7 +1363,7 @@ grokfield (declarator, declspecs, raises, init, asmspec_tree, attrlist)
init = NULL_TREE;
value = grokdeclarator (declarator, declspecs, FIELD, init != 0,
raises, attrlist);
raises, NULL_TREE);
if (! value)
return value; /* friend or constructor went bad. */
@ -1477,6 +1477,10 @@ grokfield (declarator, declspecs, raises, init, asmspec_tree, attrlist)
/* The corresponding pop_obstacks is in cp_finish_decl. */
push_obstacks_nochange ();
if (attrlist)
cplus_decl_attributes (value, TREE_PURPOSE (attrlist),
TREE_VALUE (attrlist));
if (TREE_CODE (value) == VAR_DECL)
{
/* We cannot call pushdecl here, because that would

View File

@ -3313,6 +3313,14 @@ real_yylex ()
token_buffer[0] = '^';
token_buffer[1] = 0;
}
else if (ptr->token == NAMESPACE)
{
static int warned;
if (! warned)
warning ("namespaces are mostly broken in this version of g++");
warned = 1;
}
value = (int) ptr->token;
}

View File

@ -4582,7 +4582,7 @@ expand_expr (exp, target, tmode, modifier)
through a pointer to const does not mean that the value there can
never change. Languages where it can never change should
also set TREE_STATIC. */
RTX_UNCHANGING_P (temp) = TREE_READONLY (exp) | TREE_STATIC (exp);
RTX_UNCHANGING_P (temp) = TREE_READONLY (exp) & TREE_STATIC (exp);
return temp;
}

View File

@ -531,7 +531,18 @@ read_scan_file (in_fname, argc, argv)
push_parse_file (&scan_in, in_fname);
CPP_OPTIONS (&scan_in)->no_line_commands = 1;
#ifdef FIXPROTO_INIT
/* Some targets may assume special definitions (for example
OSF header files assume __LANGUAGE_C__). These macros
are normally passed to cpplib by gcc - but we here invoke
cpplib directly, without going through gcc.
Handle these and other target-dependent initializations here. */
FIXPROTO_INIT (&scan_in);
#endif
/* Actually (pre-)process the header file. */
scan_decls (&scan_in, argc, argv);
check_macro_names (&scan_in, include_entry->required);
check_macro_names (&scan_in, include_entry->extra);

View File

@ -1520,6 +1520,33 @@ if [ -r ${LIB}/$file ]; then
fi
fi
# sys/wait.h on AIX 3.2.5 puts the declaration of wait3 before the definition
# of struct rusage, so the prototype (added by fixproto) causes havoc.
file=sys/wait.h
if [ -r $file ] && [ ! -r ${LIB}/$file ]; then
cp $file ${LIB}/$file >/dev/null 2>&1 || echo "Can't copy $file"
chmod +w ${LIB}/$file 2>/dev/null
fi
if [ -r ${LIB}/$file ] \
&& grep 'bos325,' ${LIB}/$file >/dev/null; then
echo Fixing $file, wait3 declaration
sed -e '/^extern pid_t wait3();$/i\
struct rusage;
'\
${LIB}/$file > ${LIB}/${file}.sed
rm -f ${LIB}/$file; mv ${LIB}/${file}.sed ${LIB}/$file
if cmp $file ${LIB}/$file >/dev/null 2>&1; then
rm -f ${LIB}/$file
else
# Find any include directives that use "file".
for include in `egrep '^[ ]*#[ ]*include[ ]*"[^/]' ${LIB}/$file | sed -e 's/^[ ]*#[ ]*include[ ]*"\([^"]*\)".*$/\1/'`; do
dir=`echo $file | sed -e s'|/[^/]*$||'`
required="$required ${INPUT} $dir/$include ${LIB}/$dir/$include"
done
fi
fi
# NeXT 2.0 defines 'int wait(union wait*)', which conflicts with Posix.1.
# Note that version 3 of the NeXT system has wait.h in a different directory,
# so that this code won't do anything. But wait.h in version 3 has a

View File

@ -147,11 +147,11 @@ original English.
@sp 2
@center Richard M. Stallman
@sp 3
@center Last updated 26 November 1995
@center Last updated 29 June 1996
@sp 1
@c The version number appears twice more in this file.
@center for version 2.7.2
@center for version 2.7.2.1
@page
@vskip 0pt plus 1filll
Copyright @copyright{} 1988, 89, 92, 93, 94, 1995 Free Software Foundation, Inc.
@ -904,18 +904,23 @@ the ones who have actually sued. Apple's lawsuit was defeated, for
reasons only partly related to the general issue of interface copyright.
Lotus won lawsuits against two small companies, which were thus put out
of business. Then they sued Borland; they won in the trial court (no
of business. Then Lotus sued Borland; Lotus won in the trial court (no
surprise, since it was the same court that had ruled for Lotus twice
before), but the decision was reversed by the court of appeals, with
help from the League for Programming Freedom in the form of a
friend-of-the-court brief. We are now waiting to see if the Supreme
Court will hear the case. If it does, the League for Programming
Freedom will again submit a brief.
before), but the court of appeals ruled in favor of Borland, which was
assisted by a friend-of-the-court brief from the League for Programming
Freedom.
The battle is not over. Just this summer a company that produced a
simulator for a CDC computer was shut down by a copyright lawsuit by
CDC, which charged that the simulator infringed the copyright on the
manuals for the computer.
Lotus appealed the case to the Supreme Court, which heard the case but
was unable to reach a decision. This failure means that the appeals
court decision stands, in one portion of the United States, and may
influence the other appeals courts, but it does not set a nationwide
precedent. The battle is not over, and it is not limited to the United
States.
The battle is extending into other areas of software as well. In 1995 a
company that produced a simulator for a CDC computer was shut down by a
copyright lawsuit, in which CDC charged that the simulator infringed the
copyright on the manuals for the computer.
If the monopolists get their way, they will hobble the software field:
@ -1238,11 +1243,11 @@ GNU CC. The fix is to get rid of the file @code{real-ld} which purify
installs---so that GNU CC won't try to use it.
@item
On Linux SLS 1.01, there is a problem with @file{libc.a}: it does not
contain the obstack functions. However, GNU CC assumes that the obstack
functions are in @file{libc.a} when it is the GNU C library. To work
around this problem, change the @code{__GNU_LIBRARY__} conditional
around line 31 to @samp{#if 1}.
On SLS 1.01, a Linux-based GNU system, there is a problem with
@file{libc.a}: it does not contain the obstack functions. However, GNU
CC assumes that the obstack functions are in @file{libc.a} when it is
the GNU C library. To work around this problem, change the
@code{__GNU_LIBRARY__} conditional around line 31 to @samp{#if 1}.
@item
On some 386 systems, building the compiler never finishes because

View File

@ -778,82 +778,45 @@ first three arguments in function calls in registers. Structures are no
longer a multiple of 2 bytes.
@item hppa*-*-*
There are two variants of this CPU, called 1.0 and 1.1, which have
different machine descriptions. You must use the right one for your
machine. All 7@var{nn} machines and 8@var{n}7 machines use 1.1, while
all other 8@var{nn} machines use 1.0.
The easiest way to handle this problem is to use @samp{configure
hp@var{nnn}} or @samp{configure hp@var{nnn}-hpux}, where @var{nnn} is
the model number of the machine. Then @file{configure} will figure out
if the machine is a 1.0 or 1.1. Use @samp{uname -a} to find out the
model number of your machine.
There are several variants of the HP-PA processor which run a variety
of operating systems. GNU CC must be configured to use the correct
processor type and operating system, or GNU CC will not function correctly.
The easiest way to handle this problem is to @emph{not} specify a target
when configuring GNU CC, the @file{configure} script will try to automatically
determine the right processor type and operating system.
@samp{-g} does not work on HP-UX, since that system uses a peculiar
debugging format which GNU CC does not know about. However, @samp{-g}
will work if you also use GAS and GDB in conjunction with GCC. We
highly recommend using GAS for all HP-PA configurations.
You should be using GAS-2.3 (or later) along with GDB-4.12 (or later). These
You should be using GAS-2.6 (or later) along with GDB-4.16 (or later). These
can be retrieved from all the traditional GNU ftp archive sites.
Build GAS and install the resulting binary as:
GAS will need to be installed into a directory before @code{/bin},
@code{/usr/bin}, and @code{/usr/ccs/bin} in your search path. You
should install GAS before you build GNU CC.
@example
/usr/local/lib/gcc-lib/@var{configuration}/@var{gccversion}/as
@end example
@noindent
where @var{configuration} is the configuration name (perhaps
@samp{hp@var{nnn}-hpux}) and @var{gccversion} is the GNU CC version
number. Do this @emph{before} starting the build process, otherwise you will
get errors from the HPUX assembler while building @file{libgcc2.a}. The
command
@example
make install-dir
@end example
@noindent
will create the necessary directory hierarchy so you can install GAS before
building GCC.
To enable debugging, configure GNU CC with the @samp{--with-gnu-as} option
before building.
It has been reported that GNU CC produces invalid assembly code for
1.1 machines running HP-UX 8.02 when using the HP assembler. Typically
the errors look like this:
@example
as: bug.s @@line#15 [err#1060]
Argument 0 or 2 in FARG upper
- lookahead = ARGW1=FR,RTNVAL=GR
as: foo.s @@line#28 [err#1060]
Argument 0 or 2 in FARG upper
- lookahead = ARGW1=FR
@end example
You can check the version of HP-UX you are running by executing the command
@samp{uname -r}. If you are indeed running HP-UX 8.02 on a PA and
using the HP assembler then configure GCC with "hp@var{nnn}-hpux8.02".
To enable debugging, you must configure GNU CC with the @samp{--with-gnu-as}
option before building.
@item i370-*-*
This port is very preliminary and has many known bugs. We hope to
have a higher-quality port for this machine soon.
@item i386-*-linuxoldld
Use this configuration to generate a.out binaries on Linux if you do not
have gas/binutils version 2.5.2 or later installed. This is an obsolete
configuration.
Use this configuration to generate a.out binaries on Linux-based GNU
systems, if you do not have gas/binutils version 2.5.2 or later
installed. This is an obsolete configuration.
@item i386-*-linuxaout
Use this configuration to generate a.out binaries on Linux. This configuration
is being superseded. You must use gas/binutils version 2.5.2 or
later.
Use this configuration to generate a.out binaries on Linux-based GNU
systems. This configuration is being superseded. You must use
gas/binutils version 2.5.2 or later.
@item i386-*-linux
Use this configuration to generate ELF binaries on Linux. You must
use gas/binutils version 2.5.2 or later.
Use this configuration to generate ELF binaries on Linux-based GNU
systems. You must use gas/binutils version 2.5.2 or later.
@item i386-*-sco
Compilation with RCC is recommended. Also, it may be a good idea to

View File

@ -6041,13 +6041,16 @@ maybe_eliminate_biv_1 (x, insn, bl, eliminate_p, where)
{
/* Can replace with any giv that was reduced and
that has (MULT_VAL != 0) and (ADD_VAL == 0).
Require a constant for MULT_VAL, so we know it's nonzero. */
Require a constant for MULT_VAL, so we know it's nonzero.
??? We disable this optimization to avoid potential
overflows. */
for (v = bl->giv; v; v = v->next_iv)
if (CONSTANT_P (v->mult_val) && v->mult_val != const0_rtx
&& v->add_val == const0_rtx
&& ! v->ignore && ! v->maybe_dead && v->always_computable
&& v->mode == mode)
&& v->mode == mode
&& 0)
{
if (! eliminate_p)
return 1;
@ -6067,12 +6070,19 @@ maybe_eliminate_biv_1 (x, insn, bl, eliminate_p, where)
/* Look for a giv with (MULT_VAL != 0) and (ADD_VAL != 0);
replace test insn with a compare insn (cmp REDUCED_GIV ADD_VAL).
Require a constant for MULT_VAL, so we know it's nonzero. */
Require a constant for MULT_VAL, so we know it's nonzero.
??? Do this only if ADD_VAL is a pointer to avoid a potential
overflow problem. */
for (v = bl->giv; v; v = v->next_iv)
if (CONSTANT_P (v->mult_val) && v->mult_val != const0_rtx
&& ! v->ignore && ! v->maybe_dead && v->always_computable
&& v->mode == mode)
&& v->mode == mode
&& (GET_CODE (v->add_val) == SYMBOL_REF
|| GET_CODE (v->add_val) == LABEL_REF
|| GET_CODE (v->add_val) == CONST
|| (GET_CODE (v->add_val) == REG
&& REGNO_POINTER_FLAG (REGNO (v->add_val)))))
{
if (! eliminate_p)
return 1;
@ -6127,7 +6137,11 @@ maybe_eliminate_biv_1 (x, insn, bl, eliminate_p, where)
for (v = bl->giv; v; v = v->next_iv)
if (CONSTANT_P (v->mult_val) && INTVAL (v->mult_val) > 0
&& CONSTANT_P (v->add_val)
&& (GET_CODE (v->add_val) == SYMBOL_REF
|| GET_CODE (v->add_val) == LABEL_REF
|| GET_CODE (v->add_val) == CONST
|| (GET_CODE (v->add_val) == REG
&& REGNO_POINTER_FLAG (REGNO (v->add_val))))
&& ! v->ignore && ! v->maybe_dead && v->always_computable
&& v->mode == mode)
{
@ -6160,12 +6174,14 @@ maybe_eliminate_biv_1 (x, insn, bl, eliminate_p, where)
}
/* Look for giv with positive constant mult_val and nonconst add_val.
Insert insns to calculate new compare value. */
Insert insns to calculate new compare value.
??? Turn this off due to possible overflow. */
for (v = bl->giv; v; v = v->next_iv)
if (CONSTANT_P (v->mult_val) && INTVAL (v->mult_val) > 0
&& ! v->ignore && ! v->maybe_dead && v->always_computable
&& v->mode == mode)
&& v->mode == mode
&& 0)
{
rtx tem;
@ -6191,12 +6207,14 @@ maybe_eliminate_biv_1 (x, insn, bl, eliminate_p, where)
if (invariant_p (arg) == 1)
{
/* Look for giv with constant positive mult_val and nonconst
add_val. Insert insns to compute new compare value. */
add_val. Insert insns to compute new compare value.
??? Turn this off due to possible overflow. */
for (v = bl->giv; v; v = v->next_iv)
if (CONSTANT_P (v->mult_val) && INTVAL (v->mult_val) > 0
&& ! v->ignore && ! v->maybe_dead && v->always_computable
&& v->mode == mode)
&& v->mode == mode
&& 0)
{
rtx tem;

View File

@ -243,9 +243,10 @@ hash_value_for_key (cache_ptr cache, const void *key)
if (node)
do {
if ((*cache->compare_func)(node->key, key))
if ((*cache->compare_func)(node->key, key)) {
retval = node->value;
else
break;
} else
node = node->next;
} while (!retval && node);

View File

@ -437,7 +437,7 @@ layout_record (rec)
That can happen because the width exceeds BIGGEST_ALIGNMENT
or because it exceeds maximum_field_alignment. */
if (const_size / type_align
!= (const_size + field_size - 1) / type_align)
!= (const_size + (field_size % type_align) - 1) / type_align)
const_size = CEIL (const_size, type_align) * type_align;
}
#endif

View File

@ -1 +1 @@
char *version_string = "2.7.2";
char *version_string = "2.7.2.1";